zoukankan      html  css  js  c++  java
  • SSH框架整合

    学习搭建框架有得于对框架的理解,排错也比较有思路。这次文章介绍使用eclipse详细整合Spring、Struts2和Hibernate的过程。

    需求:使用SSH框架对用户信息保存到数据库中。

    做的过程中会遇到很多问题,一步一步慢慢来,整合完Struts2和Spring后先运行项目测试一下有没有问题再继续。问题比较多的是jar包版本和冲突问题,遇到问题很正常,要耐心查看异常慢慢解决,耐心!!

    1. 加入jar包

    (1)struts2

    (2)hibernate

    (3)spring

      IOC:spring-beans、spring-context、spring-core、spring-expression、log4j、commons-logging

      AOP:spring-aop、spring-aspects、aopalliance、aspectj.weaver

      事务管理的包:spring-tx、spring-jdbc

      整合Hibernate的包:spring-orm

      整合Web项目的包:spring-web

      整合Junit单元测试的包:spring-test

      连接池:c3p0

    (4)日志记录包、数据库连接包、C3P0包

    2. 配置文件

    (1)struts2: web.xml、struts.xml

    (2)hibernate: hibernate.cfg.xml(核心文件)、XX.hbm.xml(映射文件)。其中hibernate.cfg.xml文件在SSH整合中可以被省略。

    (3)spring: applicationContext.xml、web.xml(配置核心监听器)

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        id="WebApp_ID" version="3.0">
        <display-name>SSH</display-name>
    
        <!-- struts2的框架核心过滤器配置 -->
        <filter>
            <filter-name>struts</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
        
        <!-- Spring框架的核心监听器 -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
        
    
    </web-app>

     3. 创建包结构和实体类。

    (1)包结构有4个:action、service、dao、entity。这个顺序也是调用的顺序,action调用service, service调用dao...

     

    (2)在entity包中创建用户实体类: User.java

    package com.jmu.ssh.entity;
    
    /**
     * 实体类:用户
     *
     * @author Sky
     * @date 2017年3月10日 下午10:07:16
     */
    public class User {
    
        private String name;
        private String password;
        private String email;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    }

     4. Struts2整合Spring框架

    编写UserAction、UserService、UserDao的类,并在applicationContext.xml中配置bean。因为在类中有提供setter方法,所以配置的bean可以按名称自动完成注入。

    UserAction.java

    package com.jmu.ssh.action;
    
    import com.jmu.ssh.entity.User;
    import com.jmu.ssh.service.UserService;
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * action层注入service类
     *
     * @author Sky
     * @date 2017年3月11日 下午8:06:07
     */
    public class UserAction extends ActionSupport {
    
        private static final long serialVersionUID = 1L;
        
        private User user; //前台传过来的对象
         
        private UserService userService;
        /*
         * 按名称来完成注入UserService
         */
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
        @Override
        public String execute(){
            userService.saveUser(user);
            System.out.println("UserAction中的execute执行了...");
            return null;
        }
        
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
    }

    UserSerivce.java

    package com.jmu.ssh.service;
    
    import com.jmu.ssh.dao.UserDao;
    import com.jmu.ssh.entity.User;
    /**
     * UserService类,调用UserDao
     * service层注入dao类
     *
     * @author Sky
     * @date 2017年3月11日 下午8:02:26
     */
    public class UserService {
        
        private UserDao userDao;
        /*
         * 提供setter方法来注入UserDao
         */
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
        public void saveUser(User user) {
            System.out.println("UserService中的create方法执行了...");
            userDao.saveUser(user);
        }
    }

    UserDao.java

    package com.jmu.ssh.dao;
    
    import com.jmu.ssh.entity.User;
    
    public class UserDao {
    
        public void saveUser(User user) {
            System.out.println("Dao中的saveUser方法执行了...");
            
        }
    }

    前台addUser.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>保存用户页面</title>
    </head>
    <body>
        <form action="userAction" method="post">
            用户名:<input name="name" type="text"/>
            密码:<input name="password" type="password"/>
            邮箱:<input name="email" type="text"/>
            <button>提交</button>
        </form>
    </body>
    </html>

    applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!-- 配置Action的类,把action交给spring管理 -->
        <bean id="userAction" class="com.jmu.ssh.action.UserAction" scope="prototype">
            <!-- 手动注入Service -->
            <property name="userService" ref="userService"></property>
        </bean>
    
        <!-- 配置Service的类 -->
        <bean id="userService" class="com.jmu.ssh.service.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <!-- 配置Dao类 -->
        <bean id="userDao" class="com.jmu.ssh.dao.UserDao">
        
        </bean>
    
    
    </beans>

    struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
    
        <package name="ssh" namespace="/" extends="struts-default">
            <!-- action的类由Struts2自身来创建
            <action name="userAction" class="com.jmu.ssh.action.UserAction" method="execute"> -->
            
            <!-- action的类交给Spring框架来创建,方便aop操作 -->
            <action name="userAction" class="userAction" method="execute">
                
            </action>
    
        </package>
    </struts>

    Struts2和Spring有两种整合方式:

    (1)action的类由Struts2自身来创建

      在struts.xml中的action的class要写全类名(包括包名),在applicationContext.xml中不需要配置action的bean。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <package name="ssh" namespace="/" extends="struts-default">
            <!-- action的类由Struts2自身来创建 -->
            <action name="userAction" class="com.jmu.ssh.action.UserAction" method="execute">
        
            </action>
        </package>
    </struts>
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!-- 配置Service的类 -->
        <bean id="userService" class="com.jmu.ssh.service.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <!-- 配置Dao类 -->
        <bean id="userDao" class="com.jmu.ssh.dao.UserDao">
        
        </bean>
    </beans>

    (2)action的类交给Spring框架来创建(建议使用,方便aop操作)

      在struts.xml中的action的class写applicationContext.xml中配置的action类bean即可。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <package name="ssh" namespace="/" extends="struts-default">
            
            <!-- action的类交给Spring框架来创建,方法aop操作 -->
            <action name="userAction" class="userAction" method="execute">
                
            </action>
        </package>
    </struts>
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!-- 配置Action的类,把action交给spring管理 -->
        <bean id="userAction" class="com.jmu.ssh.action.UserAction" scope="prototype">
            <!-- 手动注入Service -->
            <property name="userService" ref="userService"></property>
        </bean>
    
        <!-- 配置Service的类 -->
        <bean id="userService" class="com.jmu.ssh.service.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <!-- 配置Dao类 -->
        <bean id="userDao" class="com.jmu.ssh.dao.UserDao">
        
        </bean>
    </beans>

    可以启动服务器查看方法是否都执行

    5. Spring整合Hibernate

    (1)创建映射文件.hbm.xml

      在entity包中创建对应的映射文件: User.hbm.xml(小技巧:选中实体类User.java再右键创建时会自动生成约束和内容)

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 2017-3-10 22:15:16 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="com.jmu.ssh.entity.User" table="USER1">
            <id name="name" type="java.lang.String">
                <column name="NAME" />
                <generator class="assigned" />
            </id>
            <property name="password" type="java.lang.String">
                <column name="PASSWORD" />
            </property>
            <property name="email" type="java.lang.String">
                <column name="EMAIL" />
            </property>
        </class>
    </hibernate-mapping>

    (2)创建jdbc.properties文件(数据库连接的基本信息)。单独使用Hibernate的时候,数据库连接的基本信息是放在hibernate.cfg.xml中,和Spring整合不再需要hibernate.cfg.xml文件。

    jdbc.properties

    jdbc.driverClass=oracle.jdbc.driver.OracleDriver
    jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
    jdbc.username=binjf
    jdbc.password=123456

    (3)Spring配置(applicationContext.xml)

    <?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:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
        
        <!-- 引入外部的属性文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        
        <!-- 配置连接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driverClass}"></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
        
        <!-- 配置Hibernate的相关属性,需要spring-orm.jar包 -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        
            <!-- 注入连接池 -->
            <property name="dataSource" ref="dataSource"></property>
            
            <!-- 配置Hibernate的属性,配置hibernate 的基本信息 -->
            <property name="hibernateProperties">
                <props>
                    <!-- hibernate 所使用的数据库方言 -->
                    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                    <!-- 执行操作时是否在控制台打印SQL -->
                    <prop key="hibernate.show_sql">true</prop>
                    <!-- 是否对SQL 进行格式化 -->
                    <prop key="hibernate.format_sql">true</prop>
                     <!-- 指定自动生成数据表的策略。update:数据库中有该表就使用,没表就创建 -->
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
                </props>
            </property>
            
            <!-- 加载Hibernate中的映射文件 -->
            <property name="mappingResources">
                <list>
                    <!-- .hbm.xml的全路径,包名用"/"隔开而不是用"." -->
                    <value>com/jmu/ssh/entity/User.hbm.xml</value>
                </list>
            </property>
        </bean>
    
        <!-- 配置Action的类,把action交给spring管理 -->
        <bean id="userAction" class="com.jmu.ssh.action.UserAction" scope="prototype">
            <!-- 手动注入Service -->
            <property name="userService" ref="userService"></property>
        </bean>
    
        <!-- 配置Service的类 -->
        <bean id="userService" class="com.jmu.ssh.service.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <!-- 配置Dao类 -->
        <bean id="userDao" class="com.jmu.ssh.dao.UserDao">
        
        </bean>
    </beans>

    此时,可以启动项目验证是否已经在数据库中自动创建表。因为User可以为Oracle数据库的关键字,如果在User.hbm.xml中的table="user"是无法创建的,改为table="user1"即可(或其他名字)。

    6. 编写Dao中的代码来操作数据库

    package com.jmu.ssh.dao;
    
    import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
    
    import com.jmu.ssh.entity.User;
    /**
     * 继承HibernateDaoSupport可以不用写SessionFactory就可以注入,直接使用Hibernate提供的模板。
     *
     * @author Sky
     * @date 2017年3月12日 下午12:33:57
     */
    public class UserDao extends HibernateDaoSupport {
    
        /*private SessionFactory sessionFactory;
    
        public void setSessionfactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }*/
    
        public void saveUser(User user) {
            System.out.println("Dao中的saveUser方法执行了...");
            this.getHibernateTemplate().save(user);
        }
    }

    7. 事务管理

    (1)在applicationContext.xml中配置事务管理器

    (2)在业务类上加上事务注解(即UserService.java类): @Transactional

    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    下面是完整的项目代码:

    (1)目录结构:

    (2)前台:aadUser.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>保存用户页面</title>
    </head>
    <body>
        <form action="userAction" method="post">
            用户名:<input name="name" type="text"/>
            密码:<input name="password" type="password"/>
            邮箱:<input name="email" type="text"/>
            <button>提交</button>
        </form>
    </body>
    </html>

    (3)后台java

    UserAction.java

    package com.jmu.ssh.action;
    
    import com.jmu.ssh.entity.User;
    import com.jmu.ssh.service.UserService;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    /**
     * action层注入service类
     * Action类实现ModelDriven接口,可以把前台传过来的数据和User类的属性对应,封装成对象。
     * 如:前台有name,password,email,User对象也是有这几个名字相同的属性,便把前台数据注入到对象中,名称不同的为null。
     *
     * @author Sky
     * @date 2017年3月11日 下午8:06:07
     */
    public class UserAction extends ActionSupport implements ModelDriven<User> {
    
        private static final long serialVersionUID = 1L;
        
        private User user = new User(); //前台传过来的对象
         
        private UserService userService;
        /*
         * 按名称来完成注入UserService
         */
        public void setUserService(UserService userService) {
            this.userService = userService;
        }
        @Override
        public String execute(){
            userService.saveUser(user);
            System.out.println("UserAction中的execute执行了...");
            System.out.println(user);
            return null;
        }
        
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
        @Override
        public User getModel() {
            return user;
        }
    }

    UserService.java

    package com.jmu.ssh.service;
    
    import org.springframework.transaction.annotation.Transactional;
    
    import com.jmu.ssh.dao.UserDao;
    import com.jmu.ssh.entity.User;
    /**
     * UserService类,调用UserDao
     * service层注入dao类
     *
     * @author Sky
     * @date 2017年3月11日 下午8:02:26
     */
    @Transactional
    public class UserService {
        
        private UserDao userDao;
        /*
         * 提供setter方法来注入UserDao
         */
        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }
        public void saveUser(User user) {
            System.out.println("UserService中的create方法执行了...");
            userDao.saveUser(user);
        }
    }

    UserDao.java

    package com.jmu.ssh.dao;
    
    import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
    
    import com.jmu.ssh.entity.User;
    /**
     * 继承HibernateDaoSupport可以不用写SessionFactory就可以注入,直接使用Hibernate提供的模板。
     *
     * @author Sky
     * @date 2017年3月12日 下午12:33:57
     */
    public class UserDao extends HibernateDaoSupport {
    
        /*private SessionFactory sessionFactory;
    
        public void setSessionfactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }*/
    
        public void saveUser(User user) {
            System.out.println("Dao中的saveUser方法执行了...");
            this.getHibernateTemplate().save(user);
        }
    }

    User.java

    package com.jmu.ssh.entity;
    
    /**
     * 实体类:用户
     *
     * @author Sky
     * @date 2017年3月10日 下午10:07:16
     */
    public class User {
    
        private String name;
        private String password;
        private String email;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getEmail() {
            return email;
        }
        public void setEmail(String email) {
            this.email = email;
        }
    }

    (4)配置文件

    user.hbm.xml

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!-- Generated 2017-3-10 22:15:16 by Hibernate Tools 3.4.0.CR1 -->
    <hibernate-mapping>
        <class name="com.jmu.ssh.entity.User" table="USER1">
            <id name="name" type="java.lang.String">
                <column name="NAME" />
                <generator class="assigned" />
            </id>
            <property name="password" type="java.lang.String">
                <column name="PASSWORD" />
            </property>
            <property name="email" type="java.lang.String">
                <column name="EMAIL" />
            </property>
        </class>
    </hibernate-mapping>

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://java.sun.com/xml/ns/javaee"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        id="WebApp_ID" version="3.0">
        <display-name>SSH</display-name>
    
        <!-- struts2的框架核心过滤器配置 -->
        <filter>
            <filter-name>struts</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>struts</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    
        <!-- Spring框架的核心监听器 -->
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>
        <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </context-param>
    </web-app>

    struts.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <package name="ssh" namespace="/" extends="struts-default">
            <!-- action的类由Struts2自身来创建 
            <action name="userAction" class="com.jmu.ssh.action.UserAction" method="execute"> -->
            
            <!-- action的类交给Spring框架来创建,方法aop操作 -->
            <action name="userAction" class="userAction" method="execute">
                
            </action>
        </package>
    </struts>

    jdbc.properties

    jdbc.driverClass=oracle.jdbc.driver.OracleDriver
    jdbc.url=jdbc:oracle:thin:@219.228.251.27:1521:orcl
    jdbc.username=binjf
    jdbc.password=123456

    applicationContext.xml

    <?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:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
        
        <!-- 引入外部的属性文件 -->
        <context:property-placeholder location="classpath:jdbc.properties"/>
        
        <!-- 配置连接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driverClass}"></property>
            <property name="jdbcUrl" value="${jdbc.url}"></property>
            <property name="user" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>
        </bean>
        
        <!-- 配置Hibernate的相关属性,需要spring-orm.jar包 -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        
            <!-- 注入连接池 -->
            <property name="dataSource" ref="dataSource"></property>
            
            <!-- 配置Hibernate的属性,配置hibernate 的基本信息 -->
            <property name="hibernateProperties">
                <props>
                    <!-- hibernate 所使用的数据库方言 -->
                    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                    <!-- 执行操作时是否在控制台打印SQL -->
                    <prop key="hibernate.show_sql">true</prop>
                    <!-- 是否对SQL 进行格式化 -->
                    <prop key="hibernate.format_sql">true</prop>
                     <!-- 指定自动生成数据表的策略。update:数据库中有该表就使用,没表就创建 -->
                    <prop key="hibernate.hbm2ddl.auto">update</prop>
                </props>
            </property>
            
            <!-- 加载Hibernate中的映射文件 -->
            <property name="mappingResources">
                <list>
                    <!-- .hbm.xml的全路径,包名用"/"隔开也不是用"." -->
                    <value>com/jmu/ssh/entity/User.hbm.xml</value>
                </list>
            </property>
        </bean>
    
        <!-- 配置Action的类,把action交给spring管理 -->
        <bean id="userAction" class="com.jmu.ssh.action.UserAction" scope="prototype">
            <!-- 手动注入Service -->
            <property name="userService" ref="userService"></property>
        </bean>
    
        <!-- 配置Service的类 -->
        <bean id="userService" class="com.jmu.ssh.service.UserService">
            <property name="userDao" ref="userDao"></property>
        </bean>
        
        <!-- 配置Dao类 -->
        <bean id="userDao" class="com.jmu.ssh.dao.UserDao">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
    
        <!-- 配置事务管理器 -->
        <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        
        <!-- 开启注解事务 -->
        <tx:annotation-driven transaction-manager="transactionManager"/>
    
    </beans>

    (5)所有jar包

    (6)运行结果:

    页面:

    控制台:

    数据库:

  • 相关阅读:
    Extjs combobox设置默认值
    sql 游标循环遍历
    .NET中的DES对称加密
    Asp.Net生命周期
    浅谈C#随机数发生器
    面向对象-多态 附抽象
    c#常用的一些命名空间
    c#面向对象编程基础
    string应用
    [自习任我行]第二阶段任务跟踪10
  • 原文地址:https://www.cnblogs.com/sky230/p/6533365.html
Copyright © 2011-2022 走看看