• struts2+Hibernate4+spring3+EasyUI环境搭建之四:引入hibernate4以及spring3与hibernate4整合


    1、导入hibernate4 jar包:注意之前引入的struts2需要排除javassist  否则冲突

    <!-- hibernate4 -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>4.1.7.Final</version>
            </dependency>

    2、引入hibernate配置文件:spring-hibernate.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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    ">
    
        <!-- JNDI方式配置数据源 -->
        <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="${jndiName}"></property> </bean> -->
    
        <!-- 配置数据源 -->
        <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
            <property name="url" value="${jdbc_url}" />
            <property name="username" value="${jdbc_username}" />
            <property name="password" value="${jdbc_password}" />
    
            <!-- 初始化连接大小 -->
            <property name="initialSize" value="0" />
            <!-- 连接池最大使用连接数量 -->
            <property name="maxActive" value="20" />
            <!-- 连接池最大空闲 -->
            <property name="maxIdle" value="20" />
            <!-- 连接池最小空闲 -->
            <property name="minIdle" value="0" />
            <!-- 获取连接最大等待时间 -->
            <property name="maxWait" value="60000" />
    
            <!-- <property name="poolPreparedStatements" value="true" /> <property name="maxPoolPreparedStatementPerConnectionSize" value="33" /> -->
    
            <property name="validationQuery" value="${validationQuery}" />
            <property name="testOnBorrow" value="false" />
            <property name="testOnReturn" value="false" />
            <property name="testWhileIdle" value="true" />
    
            <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
            <property name="timeBetweenEvictionRunsMillis" value="60000" />
            <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
            <property name="minEvictableIdleTimeMillis" value="25200000" />
    
            <!-- 打开removeAbandoned功能 -->
            <property name="removeAbandoned" value="true" />
            <!-- 1800秒,也就是30分钟 -->
            <property name="removeAbandonedTimeout" value="1800" />
            <!-- 关闭abanded连接时输出错误日志 -->
            <property name="logAbandoned" value="true" />
    
            <!-- 监控数据库 -->
            <!-- <property name="filters" value="stat" /> -->
            <property name="filters" value="mergeStat" />
        </bean>
    
        <!-- 配置hibernate session工厂 -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
                    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                    <prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
                </props>
            </property>
    
            <!-- 自动扫描注解方式配置的hibernate类文件 -->
            <property name="packagesToScan">
                <list>
                    <value>sy.model</value>
                </list>
            </property>
    
            <!-- 自动扫描hbm方式配置的hibernate文件和.hbm文件 -->
            <!-- 
            <property name="mappingDirectoryLocations">
                <list>
                    <value>classpath:sy/hbm</value>
                </list>
            </property>
             -->
        </bean>
    
        <!-- 配置事务管理器 -->
        <bean name="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
    
        <!-- 注解方式配置事物 -->
        <!-- <tx:annotation-driven transaction-manager="transactionManager" /> -->
    
        <!-- 拦截器方式配置事物 -->
        <tx:advice id="transactionAdvice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="add*" />
                <tx:method name="save*" />
                <tx:method name="update*" />
                <tx:method name="modify*" />
                <tx:method name="edit*" />
                <tx:method name="delete*" />
                <tx:method name="remove*" />
                <tx:method name="repair" />
                <tx:method name="deleteAndRepair" />
    
                <tx:method name="get*" propagation="SUPPORTS" />
                <tx:method name="find*" propagation="SUPPORTS" />
                <tx:method name="load*" propagation="SUPPORTS" />
                <tx:method name="search*" propagation="SUPPORTS" />
                <tx:method name="datagrid*" propagation="SUPPORTS" />
    
                <tx:method name="*" propagation="SUPPORTS" />
            </tx:attributes>
        </tx:advice>
        <aop:config>
            <aop:pointcut id="transactionPointcut" expression="execution(* sy.service..*Impl.*(..))" />
            <aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice" />
        </aop:config>
    
    
    </beans>

    config.properties

    hibernate.dialect=org.hibernate.dialect.OracleDialect
    driverClassName=oracle.jdbc.driver.OracleDriver
    validationQuery=SELECT 1 FROM DUAL
    jdbc_url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
    jdbc_username=sshe
    jdbc_password=sshe
    
    #hibernate.dialect=org.hibernate.dialect.MySQLDialect
    #driverClassName=com.mysql.jdbc.Driver
    #validationQuery=SELECT 1
    #jdbc_url=jdbc:mysql://localhost:3306/sy?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
    #jdbc_username=sypro
    #jdbc_password=sypro
    
    #hibernate.dialect=org.hibernate.dialect.SQLServerDialect
    #driverClassName=net.sourceforge.jtds.jdbc.Driver
    #validationQuery=SELECT 1
    #jdbc_url=jdbc:jtds:sqlserver://127.0.0.1:1433/sy
    #jdbc_username=sa
    #jdbc_password=123456
    
    #jndiName=java:comp/env/dataSourceName
    
    hibernate.hbm2ddl.auto=update
    hibernate.show_sql=true
    hibernate.format_sql=true
    
    sessionInfoName=sessionInfo
    
    uploadFieldName=filedata
    uploadFileMaxSize=20971520
    uploadFileExts=txt,rar,zip,doc,docx,xls,xlsx,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid
    uploadDirectory=attached

    注意:

      1、jndi数据源是指定数据源的配置由web服务器指定,如果tomcat中的context.xml中配置的数据源  

      数据源名字在配置文件中配置:jndiName=java:comp/env/dataSourceName

      2、hibernate配置文件配置三个方面:

        第一:数据源(用来管理数据库连接的)

        第二:sessionFactory(session的一些方法来代替原先jdbc对数据库增删改查的操作,每一个session对应一条数据库连接)

        第三:事务(事务管理、事务拦截方式、拦截切面):事务作用到service层而不是dao层,也有注解和拦截器切面方式,注解会将service下所有方法都使用事务

     这样不灵活 而拦截器比较灵活,只有增删改才需要事务 查询不需要;

      3、配置:hibernate.hbm2ddl.auto=update  (可以是ctreate、delete)会自动在数据库中创建更新删除数据表  (这就是hibernate强大之处)

      4、hibernate对于实体类映射的配置支持两种:注解和xml配置文件  建议选用前者

    3、建立Dao 并测试

     需要提前导入如下jar

    <dependency>
                <groupId>com.oracle</groupId>
                <artifactId>ojdbc14</artifactId>
                <version>10.2.0.1.0</version>
            </dependency>
    
            <!-- druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>0.2.8</version>
            </dependency>
            <!-- aspectjweaver -->
            <dependency>
                <groupId>org.aspectj</groupId>
                <artifactId>aspectjweaver</artifactId>
                <version>1.7.0</version>
            </dependency>

    <!--ojdbc14是商业包 中央仓库不提供下载 因此需要从其他渠道获取后装载到本地仓库
    命令:mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.1.0 -Dpackaging=jar -Dfile=c:/jar/ojdbc14.jar
    -->
    public class TestHibernate 
    {
    
        @Test
        public void test()
        {
            // 读取配置文件
            ApplicationContext ac = new ClassPathXmlApplicationContext(
                            new String[] { "classpath:spring.xml", "classpath:spring-hibernate.xml"});
            UserServiceI userService = (UserServiceI) ac.getBean("userService");    
            Tuser t = new Tuser();
            t.setId(UUID.randomUUID().toString());
            t.setName("哈哈哈");
            t.setPwd("12346");
            t.setCreatetime(new Timestamp(System.currentTimeMillis()));
            userService.save(t);
        }
    }

    4、web.xml中配置hibernate

    注意:openSessionInViewFilter的filter-mapping一定要在struts的上面

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
    <display-name></display-name>
    <!-- spring配置文件位置 -->
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring.xml,classpath:spring-hibernate.xml</param-value>
    </context-param>

    <!-- spring监听器 -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    <!-- openSessionInView配置 -->
    <filter>
    <filter-name>openSessionInViewFilter</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
    <init-param>
    <param-name>singleSession</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>
    <!-- Struts2配置 -->
    <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
    <filter-name>openSessionInViewFilter</filter-name>
    <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    </web-app>

    action中加入测试方法测试:

    /**
         * 编写测试类
         */
        public void add()
        {
            Tuser t = new Tuser();
            t.setId(UUID.randomUUID().toString());
            t.setName("呵呵呵");
            t.setPwd("12346");
            t.setCreatetime(new Timestamp(System.currentTimeMillis()));
            userService.save(t);
        }

    请求路径:http://localhost:8080/sshe/demo/userAction!add.action    到数据库里查看是否插入到表中

    小结:web容器加载的时候将hibernate配置文件加载进来 初始化数据源 sessionfactory 以及扫描Dao  交由spring来管理

    1、Action-->service-->Dao   全部由spring管理起来  ;

    2、每个框架都涉及三类配置:pom.xml, 框架配置文件,web.xml容器配置文件

  • 相关阅读:
    内核配置中Default kernel command string和uboot中bootargs变量的区别
    内核编译配置选项含义
    WARNING: Unable to open an initial console
    Linux内核学习之四库全书
    EABI和OABI
    0.8.11版本ffmpeg一天移植将近完成。
    mmsplayer for wince,windows demo已经发布
    mmsplayer for wince,windows demo已经发布
    0.8.11版本ffmpeg一天移植将近完成。
    ffmpeg AT&T汇编转intel汇编 之(read_time)
  • 原文地址:https://www.cnblogs.com/cac2020/p/5228996.html
Copyright © 2020-2023  润新知