Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean
Spring和Hibernate整合的时候我们经常会有如下的配置代码
1,非JPA支持的配置
<!-- 配置 Hibernate 的 SessionFactory 实例: 通过 Spring 提供的 LocalSessionFactoryBean 进行配置 -->
<!-- FacotryBean 配置的时候返回的不是本身而是返回的FactoryBean 的 getObject()方法返回的对象,此处是sessionFactory(Hibernate的类),用来创建session 进行数据库操作 -->
我们配置LocalSessionFactoryBean 得到的是LocalSessionFactoryBean 的getObject方法返回SessionFactory,SessionFactory用来创建session来进行数据库的操作
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <!-- 配置数据源属性 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- 配置 hibernate 配置文件的位置及名称 -->
        <!--  
        <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
        -->
        <!-- 使用 hibernateProperties 属相来配置 Hibernate 原生的属性 -->
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
        <!-- 配置 hibernate 映射文件的位置及名称, 可以使用通配符 -->
        <property name="mappingLocations"
value="classpath:com/atguigu/spring/hibernate/entities/*.hbm.xml">
</property>
<!-- 配置 hibernate 实体Bean的映射,如果缺少此项内容则不会创建表,创建表的过程是在生成容器的时候同时生成表 -->
<和上边配置xml类型的实体bean二选一就可以了>
<property name="annotatedClasses">
          <list>
                  <value>com.marshallee.entities.Account</value>
          </list>
        </property>
</bean>
2,JPA支持的配置
同样我们配置.LocalContainerEntityManagerFactoryBean得到的是.LocalContainerEntityManagerFactoryBean 的getObject方法返回EntityManagerFactory,EntityManagerFactory用来创建EntityManager来进行数据库的操作
<bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="showSql" value="true" />
                <property name="generateDdl" value="true" />
                <property name="databasePlatform" value="${db.dialect}" />
            </bean>
        </property>
        <property name="jpaProperties">
            <props>
                <!-- base -->
                <prop key="hibernate.hbm2ddl.auto">update</prop>
                <prop key="hibernate.transaction.flush_before_completion">true</prop>
                <!-- show_sql -->
                <prop key="hibernate.show_sql">false</prop>
                <!-- cache -->
                <prop key="hibernate.cache.use_query_cache">true</prop>
                <prop key="hibernate.cache.use_second_level_cache">true</prop>
                <prop key="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</prop>
                <prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory
                </prop>
            </props>
        </property>
    </bean>
“jpaVendorAdapter属性用于指明所使用的是哪一个厂商的JPA实现。Spring提供了多个JPA厂商适配器:
EclipseLinkJpaVendorAdapter
HibernateJpaVendorAdapter
OpenJpaVendorAdapter
TopLinkJpaVendorAdapter(在Spring 3.1版本中,已经将其废弃了)”
摘录来自: [美] Craig Walls. “Spring实战(第4版)”。 iBooks.
只要记住一点当我们配置FactoryBean后,当调用getBean(beanName)的时候我们得到的是FactoryBean.getObject返回的对象,如果我们要得到FactoryBean本身则需要在调用getObject的时候加上引用'&' 如 getBean(&beanName)
这里涉及到FactoryBean 和BeanFactory 的区别参考:http://chenzehe.iteye.com/blog/1481476
persistence.xml是JPA规范要求的,在应用程序管理类型的JPA中我们需要配置persistence.xml 中的数据源内容用PersistenceProvider来生成一个EntityManagerFactory,但是在“容器管理类型的JPA" 中 ”当运行在容器中时,可以使用容器(在我们的场景下是Spring)提供的信息来生成EntityManagerFactory。你可以将数据源信息配置在Spring应用上下文中,而不是在persistence.xml中了,尽管数据源还可以在persistence.xml中进行配置,但是这个属性指定的数据源具有更高的优先级.
Spring 中的 LocalSessionFactoryBean和LocalContainerEntityManagerFactoryBean的更多相关文章
- 关于Spring中配置LocalSessionFactoryBean来生成SessionFactory
		
转载http://m.blog.csdn.net/blog/SpbDev/8545372 学习Spring的过程中,一直不理解为何配置的bean的class是LocalSessionFacto ...
 - Spring中文文档
		
前一段时间翻译了Jetty的一部分文档,感觉对阅读英文没有大的提高(*^-^*),毕竟Jetty的受众面还是比较小的,而且翻译过程中发现Jetty的文档写的不是很好,所以呢翻译的兴趣慢慢就不大了,只能 ...
 - 使用spring提供的LocalSessionFactoryBean来得到SessionFactory
		
一直不明白,spring为什么可以通过注入LocalSessionFactoryBean的bean名称来得到SessionFactory,起初以为LocalSessionFactoryBean必然是S ...
 - Spring中@Transactional用法深度分析
		
引言: 在Spring中@Transactional提供一种控制事务管理的快捷手段,但是很多人都只是@Transactional简单使用,并未深入了解,其各个配置项的使用方法,本文将深入讲解各个配置项 ...
 - Spring中的事务管理详解
		
在这里主要介绍Spring对事务管理的一些理论知识,实战方面参考上一篇博文: http://www.cnblogs.com/longshiyVip/p/5061547.html 1. 事务简介: 事务 ...
 - spring中基础核心接口总结
		
spring中基础核心接口总结理解这几个接口,及其实现类就可以快速了解spring,具体的用法参考其他spring资料 1.BeanFactory最基础最核心的接口重要的实现类有:XmlBeanFac ...
 - Spring中的FactoryBean
		
从SessionFactory说起: 在使用SSH集成开发的时候,我们有时候会在applicationContext.xml中配置Hibernate的信息,以下是配置SessionFactory的一段 ...
 - Spring中@Transactional用法
		
作者:bladestone 来源:CSDN 原文:https://blog.csdn.net/blueheart20/article/details/44654007 版权声明:本文为博主原创文章,转 ...
 - Spring中的c3p0配置
		
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51162560 今天,我们就来详细谈谈Spring中的c3p0配置问题,好了,不耽搁 ...
 
随机推荐
- ubuntu下codeblock美化
			
1.备份配置文件:default.conf. 2.将default.conf中的内容替换为最下面代码,并保存. 3.打开codeblock,Setting-Editor-Syntax,然后选择Colo ...
 - C++面向对象的编程思想机器人
			
C++的面向对象的编程思想如下,一般情况为一个类中包含了这个对象的所有属性与函数,直接调用这个对象就可以对这个对象执行它可以使用的任何操作. #include <iostream> cla ...
 - 线性回归 Linear regression(4) 局部加权回归
			
这篇文章将介绍过拟合和欠拟合的概念,并且介绍局部加权回归算法. 过拟合和欠拟合 之前在线性回归中,我们总是将单独的x作为我们的特征,但其实我们可以考虑将,甚至x的更高次作为我们的特征,那么我们通过线性 ...
 - Jmeter简单的操作数据库
			
mysql驱动包下载地址: https://dev.mysql.com/downloads/connector/j/ 1.添加驱动配置,把下载下来的驱动配置上去 2.添加‘配置元件-用户定义的变量’, ...
 - NET Core2基于RabbitMQ对Web前端实现推送功能
			
NET Core2基于RabbitMQ对Web前端实现推送功能 https://www.cnblogs.com/Andre/p/10012329.html 在我们很多的Web应用中会遇到需要从后端将指 ...
 - 《DSP using MATLAB》示例Example7.12
			
代码: M = 21; alpha = (M-1)/2; n = [0:1:M-1]; hd = (cos(pi*(n-alpha)))./(n-alpha); hd(alpha+1) = 0; w_ ...
 - CentOS常用基础命令汇总
			
1.关机 (系统的关机.重启以及登出 ) 的命令 shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours: ...
 - java之反射概述
			
类加载器和反射 类加载器: 1 类的加载过程: 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载.连接.初始化三步骤来实现对这个类进行初始化. 加载:就是指将class文件读入内存 ...
 - 【SQLYOG】SSH ERROR:UNABLE TO OPEN CONNECTION:GETHOSTBYNAME:UNKNOWN ERROR牵引出来的一系列问题
			
出现这个问题很蹊跷,SQLyog管理过一二十台的mysql服务器或者vps,连接一直没有问题,各种服务商的都没问题,也包括阿里云的.可昨天偏偏一台阿里云的服务器本地通过SQLyog去连接它的时候报这样 ...
 - cocos2d js 利用texture packer生成sprite
			
cc.spriteFrameCache.addSpriteFrames(res.winLose_plist,res.winLose_png); var frame = cc.spriteFrameCa ...