Spring中的mappingResources和mappingDirectoryLocations

简介: 今天使用Spring+Hibernate进行事务管理,按照顺序也就是配置,DataSource,Sessionfactory,事务管理器以及拦截器。   DateSource可以直接使用Hibernate的配置文件,也可以单独配置,但是却遇到了莫名其妙的问题.

今天使用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>

 

相关文章
|
Java 数据库连接 Spring
用Spring的mappingDirectoryLocations来配置Hibernate映射文件
在Spring的applicationContext.xml中配置映射文件的方法:         com/almaer/model/Person.hbm.xml     com/almaer/model/Car.hbm.xml     com/almaer/model/Engine.hbm.xml     com/almaer/model/Toy.hbm.xml     当配置文件变得越来越多,修改起来也越来越烦人,而且基于XML的配置也可能带来输入的错误,导致你可能因为一个字符的错误而找上半天。
1150 0
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1505 0
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1469 0
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
622 0
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
1202 0
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
470 0
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
1639 0
|
11月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
702 4
|
11月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1231 3