• SSH(Spring+Struts+Hibernate)实现的简单CRUD案例


    一、啥是SSH(Spring+Struts+Hibernate)

    在这里就不多解释,直接百度了一下SSH的解释,此篇主要结合SSH来完成一个简单的CRUD项目。

    百度一下:SSH在J2EE项目中表示了3种框架,即 Spring + Struts +Hibernate。 Struts对Model,View和Controller都提供了对应的组件。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,可以应用在任何使用JDBC的场合,可以在Servlet/JSP的Web应用中使用,也可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    二、开始我们的项目

    项目结构

    2.1、pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.hsl</groupId>
        <artifactId>springStrutsHibernate02</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <dependencies>
            <!--spring相关依赖-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>5.0.2.RELEASE</version>
            </dependency>
            <!--struts2相关依赖-->
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-core</artifactId>
                <version>2.5.14.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.struts</groupId>
                <artifactId>struts2-spring-plugin</artifactId>
                <version>2.5.14.1</version>
            </dependency>
            <!--hibernate相关依赖-->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>5.2.12.Final</version>
            </dependency>
            <!--mysql依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.8-dmr</version>
            </dependency>
            <!--实现DataSource的接口-->
            <dependency>
                <groupId>com.mchange</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.5.2</version>
            </dependency>
            <!--servlet依赖-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <warSourceDirectory>web</warSourceDirectory>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    
    </project>

    2.2、web.xml

    如果spring的配置文件名为applicationContext.xml则可以省略web.xml文件中的<context-param>

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring.xml</param-value>
        </context-param>
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>

    2.3、Teacher.java

    package entity;
    
    public class Teacher {
        private int id;
        private String name;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }

    2.4、TeacherDao.java

    package dao;
    
    import entity.Teacher;
    
    import java.util.List;
    
    public interface TeacherDao {
        //添加
        void addTeacher(Teacher teacher);
        //查询全部
        List<Teacher> queryAll();
        //根据编号删除
        void delete(int id);
        //根据编号查询
        Teacher queryById(int id);
        //修改
        void update(Teacher teacher);
    }

     2.5、TeacherDaoImpl.java

    package dao;
    
    import entity.Teacher;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    
    import java.util.List;
    
    public class TeacherDaoImpl implements TeacherDao {
        private SessionFactory sessionFactory;
    
        public SessionFactory getSessionFactory() {
            return sessionFactory;
        }
    
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
    
        //增加数据
        public void addTeacher(Teacher teacher) {
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            session.save(teacher);
            transaction.commit();
            session.close();
        }
    
        //查询全部数据
        public List<Teacher> queryAll() {
            Session session = sessionFactory.openSession();
            List<Teacher> teachers = session.createQuery("from Teacher ").list();
            session.close();
            return  teachers;
        }
    
        //根据编号删除
        public void delete(int id) {
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            session.delete(session.get(Teacher.class,id));
            transaction.commit();
            session.close();
        }
    
        //根据编号查询
        public Teacher queryById(int id) {
            Session session = sessionFactory.openSession();
            Teacher teacher = session.get(Teacher.class,id);
            session.close();
            return teacher;
        }
    
        //修改
        public void update(Teacher teacher) {
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();
            session.update(teacher);
            transaction.commit();
            session.close();
        }
    }

    2.6、TeacherService.java

    package service;
    
    import dao.TeacherDao;
    import entity.Teacher;
    
    import java.util.List;
    
    public class TeacherService {
        private TeacherDao teacherDao;
    
        public TeacherDao getTeacherDao() {
            return teacherDao;
        }
    
        public void setTeacherDao(TeacherDao teacherDao) {
            this.teacherDao = teacherDao;
        }
    
        public void addTeacher(Teacher teacher){
            teacherDao.addTeacher(teacher);
        }
    
        public List<Teacher> queryAll(){
            return teacherDao.queryAll();
        }
    
        public void delete(int id){
            teacherDao.delete(id);
        }
    
        public Teacher queryById(int id){
            return teacherDao.queryById(id);
        }
    
        public void update(Teacher teacher){
            teacherDao.update(teacher);
        }
    
    }

    2.7、TeacherController.java

    package controller;
    
    import entity.Teacher;
    import org.apache.struts2.ServletActionContext;
    import service.TeacherService;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.List;
    
    public class TeacherController {
        private TeacherService teacherService;
    
        public void setTeacherService(TeacherService teacherService) {
            this.teacherService = teacherService;
        }
    
        private String name;
    
        private  int id;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        private Teacher teacher;
    
        public void setTeacher(Teacher teacher) {
            this.teacher = teacher;
        }
    
        public String add(){
            teacher.setName(name);
            teacherService.addTeacher(teacher);
            return "success";
        }
    
        public String queryAll(){
            List<Teacher> teachers = teacherService.queryAll();
            HttpServletRequest httpServletRequest = ServletActionContext.getRequest();
            httpServletRequest.setAttribute("teachers",teachers);
            return "success";
        }
    
        public String delete(){
            teacherService.delete(id);
            return "success";
        }
    
        public String queryById(){
            Teacher teacher = teacherService.queryById(id);
            HttpServletRequest httpServletRequest = ServletActionContext.getRequest();
            httpServletRequest.setAttribute("teacher",teacher);
            return "success";
        }
    
        public String update(){
            teacher.setId(id);
            teacher.setName(name);
            teacherService.update(teacher);
            return "success";
        }
    
    }

     2.8、spring.xml

    其中<props>中的hibernate.dialect得注意放置的位置,理应上是需要放第一个<prop>中,否则可能会出现找不到sessionFactory的问题。

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!--<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"-->也可以是这个
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
              p:driverClass="com.mysql.jdbc.Driver"
              p:jdbcUrl="jdbc:mysql://localhost:3306/student?serverTimezone=UTC"
              p:user="root"
              p:password="123456"
        />
    
        <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>  //注意位置!!多次入坑
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.format_sql">true</prop>
                </props>
            </property>
            <property name="mappingLocations">
                <list>
                    <value>classpath:Teacher.hbm.xml</value>
                </list>
            </property>
        </bean>
    
        <bean id="teacherDao" class="dao.TeacherDaoImpl">
            <property name="sessionFactory" ref="sessionFactory"/>
        </bean>
        <bean id="teacherService" class="service.TeacherService">
            <property name="teacherDao" ref="teacherDao"/>
        </bean>
        <bean id="teacher" class="entity.Teacher"/>
        <bean id="teacherController" class="controller.TeacherController" scope="prototype">
            <property name="teacher" ref="teacher"/>
            <property name="teacherService" ref="teacherService"/>
        </bean>
    
    </beans>

    2.9、struts.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
            "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    <struts>
        <package name="ssh" extends="struts-default">
            <action name="add" class="teacherController" method="add">
                <result name="success" type="redirectAction">queryAll</result>
            </action>
            <action name="queryAll" class="teacherController" method="queryAll">
                <result name="success" type="dispatcher">index.jsp</result>
            </action>
            <action name="delete" class="teacherController" method="delete">
                <result name="success" type="redirectAction">queryAll</result>
            </action>
            <action name="queryById" class="teacherController" method="queryById">
                <result name="success" type="dispatcher">update.jsp</result>
            </action>
            <action name="update" class="teacherController" method="update">
                <result name="success" type="redirectAction">queryAll</result>
            </action>
        </package>
    </struts>

    2.10、index.jsp

    <%@ page import="entity.Teacher" %>
    <%@ page import="java.util.List" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>老师信息</title>
      </head>
      <body>
      <table border="1">
        <tr>
          <th>编号</th>
          <th>姓名</th>
          <th>操作</th>
        </tr>
        <%
          for(Teacher teacher:(List<Teacher>) request.getAttribute("teachers")){
        %>
        <tr>
          <td><%= teacher.getId()%></td>
          <td><%= teacher.getName()%></td>
          <td>
            <a href="delete.action?id=<%= teacher.getId()%>">删除</a> |
            <a href="queryById.action?id=<%= teacher.getId()%>">修改</a>
          </td>
        </tr>
        <%
          }
        %>
      </table>
      <a href="add.jsp">添加</a>
      </body>
    </html>

    2.11、add.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>添加</title>
      </head>
      <body>
      <h1>添加</h1>
      <form action="add.action" method="post">
        <p>
          <label>姓名:</label>
          <input type="text" name="name" id="name"/>
        </p>
        <p>
          <input type="submit" value="添加">
        </p>
      </form>
      </body>
    </html>

    2.12、update.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>修改</title>
      </head>
      <body>
      <h1>修改</h1>
      <form action="update.action" method="post">
        <%
          Teacher teacher = (Teacher) request.getAttribute("teacher");
        %>
        <p>
          <label>姓名:</label>
          <input type="text" name="name" value="<%= teacher.getName()%>" id="name"/>
        </p>
        <p>
          <input type="hidden" name="id" value="<%= teacher.getId()%>" id="id"/>
          <input type="submit" value="修改">
        </p>
      </form>
      </body>
    </html>

    运行结果:

    刚刚入门sprig,如果错误请评论指正!!

    完...

  • 相关阅读:
    nodejs 的序列化与反序列化
    Visual Studio 监视与快速监视即时窗口没有智能提示
    mysql 备份数据语句
    mysql 导入sql 2006
    MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
    怎么查看mysql的安装目录
    【支付宝】退款接口 报 “缺少签名参数”
    【支付宝】"验签出错,sign值与sign_type参数指定的签名类型不一致:sign_type参数值为RSA,您实际用的签名类型可能是RSA2"
    【支付宝】支付 系统繁忙,请稍后再试(ALIN10146)
    php插入日志到数据库,对象转json
  • 原文地址:https://www.cnblogs.com/huasonglin/p/8316785.html
Copyright © 2020-2023  润新知