• Spring中的mappingResources和mappingDirectoryLocations


    今天使用Spring+Hibernate进行事务管理,按照顺序也就是配置,DataSource,Sessionfactory,事务管理器以及拦截器。

    DateSource可以直接使用Hibernate的配置文件,也可以单独配置,但是却遇到了莫名其妙的问题.

    操作步骤如下:

    1,利用MyEclipse 2014,建立Java工程;

    2,添加Spring库,此时创建了Spring的配置文件applicationContext.xml;

    3,添加Hibernate库,此时工程已经识别了Spring的配置文件,可以选择自己建立一个Hibernate的配置文件,也可以不用建立;我选择没有创建。

    4,单独创建Hibernate的配置文件(我想尝试两种方法配置)

    5,连接数据库Mysql,利用Hibernate反向工程生成每个表的hibernate的配置文件。

    6在applicationContext.xml中进行配置。

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="driverClassName" value="com.mysql.jdbc.Driver" />
            <property name="url"
                value="jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF-8" />
            <property name="username" value="root" />
            <property name="password" value="missyou" />
            <!--maxActive: 最大连接数量 -->
            <property name="maxActive" value="150" />
            <!--minIdle: 最小空闲连接 -->
            <property name="minIdle" value="5" />
            <!--maxIdle: 最大空闲连接 -->
            <property name="maxIdle" value="20" />
            <!--initialSize: 初始化连接 -->
            <property name="initialSize" value="30" />
            <!-- 连接被泄露时是否打印 -->
            <property name="logAbandoned" value="true" />
            <!--removeAbandoned: 是否自动回收超时连接 -->
            <property name="removeAbandoned" value="true" />
            <!--removeAbandonedTimeout: 超时时间(以秒数为单位) -->
            <property name="removeAbandonedTimeout" value="10" />
            <!--maxWait: 超时等待时间以毫秒为单位 1000等于60秒 -->
            <property name="maxWait" value="1000" />
            <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. -->
            <property name="timeBetweenEvictionRunsMillis" value="10000" />
            <!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
            <property name="numTestsPerEvictionRun" value="10" />
            <!-- 1000 * 60 * 30 连接在池中保持空闲而不被空闲连接回收器线程 -->
            <property name="minEvictableIdleTimeMillis" value="10000" />
            <property name="validationQuery" value="SELECT NOW() FROM DUAL" />
        </bean>
    <bean id="sessionFactoryt"
            class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    
            <!-- 也可以这样配 -->
            <!-- <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> 
                </property> -->
            <property name="dataSource">
                <ref bean="dataSource" />
            </property>
            <property name="hibernateProperties">
                <props>
    
                    <prop key="hibernate.dialect">
                        org.hibernate.dialect.SQLServerDialect                     <!-- 数据库所用的sql语句 -->
                    </prop>
                    <prop key="hibernate.show_sql">true</prop>
                    <prop key="hibernate.format_sql">true</prop>
                    <prop key="hibernate.current_session_context_class">thread</prop>
                    <prop key="hibernate.cache.use_second_level_cache">true</prop>         <!--启用二级缓存 -->
                    <prop key="hibernate.cache.use_query_cache">false</prop>              <!--是否启动查询缓存 -->
                    <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>    <!--指定缓存类 -->
    
                </props>
            </property>
            <!--   <property name="packagesToScan" value="com.*" /> 为什么不起作用,别人的就可以-->
            
            <!-- <property name="mappingResources">   
                        <list>   
                            <value>com/entity/Admin.hbm.xml</value>
                             <value>com/entity/Userinfo.hbm.xml</value>
                         </list>   
                </property>  -->
                
                <property name="mappingDirectoryLocations">
          <list>
              <value>com/entity</value>
          </list>
    </property>
        </bean>
    
    
    
        <bean id="tm"
            class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactoryt" />
        </bean>
    
        <bean id="transactionInterceptor"
            class="org.springframework.transaction.interceptor.TransactionInterceptor">
            <property name="transactionManager" ref="tm" />
            <!-- 配置事务属性 -->
            <property name="transactionAttributes">
                <props>
                    <prop key="*">PROPAGATION_REQUIRED</prop>
                </props>
            </property>
        </bean>
    
        <!-- 配置DAO -->
        <bean id="userDao" class="com.dao.imp.UserDao">
            <property name="sessionFactory" ref="sessionFactoryt" />
        </bean>

    当使用Hibernate的配置文件进行配置,没有错误:

      <!-- 也可以这样配 -->
             <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> 
                </property> 
    但是使用dataSource进行配置,运行的时候,说找不到entity,很明显是没有找到,数据库中的表的配置文件,试了好几种方法,其中
    appingResources和mappingDirectoryLocations可行,这两个的区别,前者是单独的写配置,后者是写的目录。
    在网上也找到了packagesToScan属性,下载了别人的一个示例,奇怪的是别人的可以运行,我自己设置为自己的com.entity就不可行,原因还不知。
    
    
        <!--   <property name="packagesToScan" value="com.*" /> 为什么不起作用,别人的就可以-->
            
            <!-- <property name="mappingResources">   
                        <list>   
                            <value>com/entity/Admin.hbm.xml</value>
                             <value>com/entity/Userinfo.hbm.xml</value>
                         </list>   
                </property>  -->
                
                <property name="mappingDirectoryLocations">
          <list>
              <value>com/entity</value>
          </list>
    </property>

     

  • 相关阅读:
    debian/ubuntu系统vi无法删除字符的解决办法
    kvm磁盘镜像文件管理,格式转换,调整大小
    读懂MACD背离,多空力量分析
    OpenStack部署都有哪些方式
    [STM32F10x] 利用定时器测量频率
    [STM32F10x] 利用定时器测量脉冲宽度
    曼彻斯特编码
    最近关注的几个技术点网页链接
    windows中cmd常用命令收集
    Mybatis Generator代码自动生成(实体类、dao层、映射文件)
  • 原文地址:https://www.cnblogs.com/zuiyirenjian/p/4005470.html
Copyright © 2020-2023  润新知