8.8.2 管理Hibernate的SessionFactory

        当通过Hibernate进行持久层访问时,必须先获得SessionFactory对象,它是单个数据库映射关系编译后的内存镜像。在大部分情况下,一个Java EE应用对应一个数据库,即对应一个SessionFactory对象。

        Spring 的IoC容器不仅能以声明式的方式配置SessionFactory实例,也可充分利用IoC容器的作用,为SessionFactory注入数据源引用。

        XML : Spring配置文件中配置Hibernate SessionFactory

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Spring 配置文件的根元素,使用Spring-beans-4.0.xsd语义约束 -->
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:util="http://www.springframework.org/schema/util"
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans
  7. http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
  8. http://www.springframework.org/schema/util
  9. http://www.springframework.org/schema/util/spring-util-4.0.xsd">
  10.  
  11. <!-- 定义数据源Bean,使用C3P0数据源实现,并注入数据源的必要信息 -->
  12. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  13. <property name="driverClass" value="com.mysql.jdbc.Driver"/>
  14. <property name="jdbcUrl" value="jdbc:mysql://localhost/spring"/>
  15. <property name="user" value="root"/>
  16. <property name="password" value="System"/>
  17. <property name="maxPoolSize" value="40"/>
  18. <property name="minPoolSize" value="2"/>
  19. <property name="initialPoolSize" value="2"/>
  20. <property name="maxIdleTime" value="30"/>
  21. </bean>
  22.  
  23. <!-- 定义Hibernate的SessionFactory,SessionFactory需要依赖数据源,注入dataSource -->
  24. <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
  25. <property name="dataSource" ref="dataSource"/>
  26. <!-- annotatedClasses用来列出全部持久化类 -->
  27. <property name="annotatedClasses">
  28. <list>
  29. <!-- 以下用来列出所有的PO类 -->
  30. <value>edu.pri.lime.springhibernate.bean.Book</value>
  31. </list>
  32. </property>
  33. <!-- 定义Hibernate SessionFactory的属性 -->
  34. <property name="hibernateProperties">
  35. <props>
  36. <!-- 指定Hibernate的连接方言 -->
  37. <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
  38. <!-- 是否根据Hibernate映射创建数据表 -->
  39. <prop key="hibernate.hbm2ddl.auto">update</prop>
  40. </props>
  41. </property>
  42. </bean>
  43. </beans>

        一旦在Spring的IoC容器中配置了SessionFactory Bean,它就将随应用的启动而加载,并可以充分利用IoC容器的功能,将SessionFactory Bean注入任何Bean中,比如DAO组件。一旦DAO组件获得了SessionFactory的引用,它就可以完成实际的数据库访问。

        Spring也支持访问容器数据源,如果需要使用容器数据源,则将数据源Bean修改成如下配置:

  1. <!-- 此处配置JNDI数据源 -->
  2. <bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  3. <property name="jndiName" value="java:comp/env/jdbc/myds"/>
  4. </bean>

        啦啦啦

啦啦啦

8 -- 深入使用Spring -- 8...2 管理Hibernate的SessionFactory的更多相关文章

  1. S2SH框架集成详解(Struts 2.3.16 + Spring 3.2.6 + Hibernate 3.6.10)

    近期集成了一次较新版本的s2sh,出现了不少问题,网上资料也是良莠不齐,有的甚至就是扯淡,简单的把jar包扔进去就以为是集成成功了,在这里整理一下详细的步骤,若哪位有什么不同看法,可以留言,欢迎批评改 ...

  2. Spring管理Hibernate

    为什么要用Hibernate框架? 既然用Hibernate框架访问管理持久层,那为何又提到用Spring来管理以及整合Hibernate呢? 首先我们来看一下Hibernate进行操作的步骤.比如添 ...

  3. Hibernate与Spring的事务管理

    什么是事务 这个问题比较大,按照我的理解就是,一个事务内的n个操作,要么全部完成,一旦有一个操作有问题,那么所有的操作都全部回滚. Jdbc的事务 首先,大家已经知道了,事务说白了就是一个词----统 ...

  4. ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存

    ssh整合hibernate 使用spring管理hibernate二级缓存,配置hibernate4.0以上二级缓存 hibernate  : Hibernate是一个持久层框架,经常访问物理数据库 ...

  5. spring管理hibernate,mybatis,一级缓存失效原因

    mybatis缓存:一级缓存和二级缓存 hibernate缓存:一级缓存和二级缓存 关于缓存: 缓存是介于物理数据源与应用程序之间,是对数据库中的数据复制一份临时放在内存中的容器, 其作用是为了减少应 ...

  6. spring管理hibernate session的问题探究

    我们再用spring管理hibernate的时候, 我们会继承HibernateDaoSupport 或者HibernateTemplate类. 我们不知道这两个类之间有什么关系. 也没有去关闭ses ...

  7. Spring管理Hibernate事务

    在没有加入Spring来管理Hibernate事务之前,Hibernate对事务的管理的顺序是: 开始事务 提交事务 关闭事务 这样做的原因是Hibernate对事务默认是手动提交,如果不想手动提交, ...

  8. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  9. Spring + SpringMVC + Druid + JPA(Hibernate impl) 给你一个稳妥的后端解决方案

    最近手头的工作不太繁重,自己试着倒腾了一套用开源框架组建的 JavaWeb 后端解决方案. 感觉还不错的样子,但实践和项目实战还是有很大的落差,这里只做抛砖引玉之用. 项目 git 地址:https: ...

随机推荐

  1. Nginx+php (十六)

    [教程主题]:Nginx+php [课程录制]: 创E [主要内容] [1] 编译PHP 初始环境: 为了省事把所需要的库文件全都安装上,可以使用rpm包安装,也可以用yum命令安装, yum -y  ...

  2. 基于CSS3飘带状3D菜单 菜单带小图标

    这次我们要来分享一款很特别的CSS3菜单,菜单的外观是飘带状的,并且每一个菜单项有一个精美的小图标,鼠标滑过菜单项时,菜单项就会向上凸起,像是飘带飘动一样,形成非常酷的3D视觉效果.这款CSS3飘带状 ...

  3. css样式冲突问题练习例子

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org ...

  4. .NET Framework posters with Namespaces & Types

    Framework is platform containing a huge library of types, methods, classes, etc., cataloged into nam ...

  5. 自然语言交流系统 phxnet团队 创新实训 个人博客 (十三)

    关于java socket的一些总结: Java Socket通信有很多的时候需要我们不断的学习.方面效率虽然不及C与C++但它以灵活语言优势,为大家广为使用. 本文就对在使用java做通信方面程序时 ...

  6. lapacke svd实例

    参考 intel MTK实例 https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_e ...

  7. Axiom3D:Ogre公告板集与合并批次

    在上文中,我们把Ogre里的网格分解成点线面后,我们要完成一个新的功能,在点上突出显示. 得到顶点位置后,这个功能也就是一个很简单的事,最开始是每个顶点添加一个子节点,节点上添加一个圆点. forea ...

  8. 高通 fastboot 显示

    需要在fastboot里面添加功能用于保存,记录一下fastboot显示的过程. android O新添加了选项,如下 platform/msm_shared/rules.mk ifeq ($(ENA ...

  9. Linux中几个与文档相关的命令

    一.介绍 本文将介绍几个与文档相关的命令 软件环境: 物理机 Windows 8.0 虚拟机 VMware Workstation 12 Linux系统 CentOS 7.3 二.命令cat 命令ca ...

  10. 第三百七十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目

    第三百七十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapyd部署scrapy项目 scrapyd模块是专门用于部署scrapy项目的,可以部署和管理scrapy项目 下载地址:h ...