Hibernate与Spring整合的一些配置问题(一)——LocalSessionFactoryBean

前言

  新手在学到Hibernate和Spring整合的时候,如果没有良好的教程例子,很容易不知所措,这时候就会本能地去网络上寻找相关的例子。但是,网络上的案例层次不一,有的非常老旧,有的框架又整合了很多,少有切合自身发展阶段的例子,让人看得头大。这里我,简单地介绍下LocalSessionFactoryBean及Hibernate Dao层开发的一些内容。希望能给予需要的人一些帮助。

正文

  网上的一些案例在Spring配置文件中用到了LocalSessionFactoryBean。也有人可能没注意到,只看到了这个bean的id是sessionFactory,以为它就是SessionFatory。当初,我也以为,它可能是某个SessionFactory的具体实现类,并没有在意。后来仔细看的时候才发现不是的。我们先来看下这张图

  所属文件:spring-dao.xml

  

  这是我做课程设计的spring配置文件的一部分,从上面的图中,第一眼,可以看到引用类的路径是org.springframework.orm...可以看出,这里我们需要引入spring-orm这个包,这个包可以通过maven引入。另外可以看出我注入了配置好的dataSource (数据源),实际上就是就是数据库连接池,用来管理连接的,目前比较流行的是Druid。configLocation 指定了配置文件的地址,其会加载配置文件里的内容生成真正的SessionFactory。如图:

  所属文件:hibernate.cfg.xml

    

  另外,还配置了扫描包的路径。我们知道,每次生成SessionFactory的时候,Hibernate会对数据库表做一定的更新。那这个更新必须是根据POJO来的。我自己在写SSH项目的时候都是编写POJO通过Hibernate映射来建表的(据说也有从已有数据库反过来建POJO的,不过还没用到过),一般没有经过完备的设计就动手做了,所以,POJO可能在早期会经常改动,数据库表也要对应地做更改。话说回来,既然要映射,就必须让Hibernate知道,哪些是要映射到数据库表的POJO。所以要指定扫描哪个包,Spring 的package-scan会识别标有注释@Component、@Service、@Repository、@Entity...的类,配置成bean注入Ioc容器,等到要用的时候,@Autowired。不过这里Hibernate只会识别@Entity的类。映射到数据库表。

  我们再回到LocalSessionFactoryBean,现在我们可以知道,它并不是sessionFactory,而是注入了sessionFactory。但是,为什么它的id是sessionFactory,我们@Autowired的时候引入的是它,而得到的也确确实实是sessionFactory。如图:

  所属文件:BaseDaoImpl.java

  

  其实是这样的,因为LocalSessionFactoryBean 实现了FactoryBean的接口,实现了这个接口的类有个特点,就是引用这个类的时候,spring返回的不是这个类本身,而是会去调用FactoryBean接口的getObject()这个方法来获取Bean,而LocalSessionFactoryBean的getObject()方法返回的正是它的SessionFactory。

原文地址:https://www.cnblogs.com/longfurcat/p/8278181.html

时间: 2024-11-05 21:37:56

Hibernate与Spring整合的一些配置问题(一)——LocalSessionFactoryBean的相关文章

struts2,hibernate,spring整合笔记(2)

上一话struts2,hibernate,spring整合笔记(1) 接下来继续 配置完struts之后就要开始hibernate的配置 hibernate的环境并不依赖web开发环境,在我第一次配置hibernate时用的javase, 在window-> preferences->java->user libraries,创建一个新的Use libraries,添加相应的jar包 再在项目build path->build configurationpath->add l

struts2,hibernate,spring整合笔记(3)

struts2,hibernate,spring整合笔记(1) struts2,hibernate,spring整合笔记(2) 配好struts和hibernate就要开始spring了 老规矩,还是先导入jar包 spring.jar aspectjrt.jar aspectjwerver.jar cglib-nodep-2.1_3.jar common-logging.jar c3p0-0.9.1.jar 之后加入配置文件src目录下applicationContext.xml <?xml

Hibernate 与Spring整合出现 hibernate.HibernateException: createCriteria is not valid without active transaction

当 Hibernate 和 Spring 整合时,在 Spring 中指定的 Hibernate.cfg.xml 文件内容中要注释掉以下内容: <!-- Enable Hibernate's automatic session context management --> <!-- <property name="current_session_context_class">thread</property> -->这样,才能将 Hibe

Hibernate与spring整合时的整合步骤

Hibernate与Spring整合步骤: 第一步:加入Hibernate和Spring的相关jar包 第二步:创建application.xml文件,配置dataSource和session, 第三步:将sessionFactory对象注入到Dao实现类中,并操作数据库 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/

ssh整合之三hibernate和spring整合

1.拷贝我们的spring事务控制所需的jar包 2.在spring容器中配置我们的hibernateTemplate以及事务管理器 <?xml version="1.0" encoding="UTF-8"?> <!-- spring的配置文件:导入约束 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="htt

Hibernate和spring整合

个人运行环境: hibernate:4.3.5 spring-context:4.0.6 <dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId

struts2,hibernate,spring整合笔记(4)--struts与spring的整合

饭要一口一口吃,程序也要一步一步写, 很多看起来很复杂的东西最初都是很简单的 下面要整合struts和spring spring就是我们的管家,原来我们费事费神的问题统统扔给她就好了 先写一个测试方法 package com.hibernate; import static org.junit.Assert.*; import org.hibernate.SessionFactory; import org.junit.Test; import org.springframework.conte

框架整合----------Hibernate、spring整合

说到整合框架,其实也就是环境的搭建了,首先我们要导包,这里连接数据库我们用到了spring容器,我们用连接池来进行数据库的连接,我们需要导入c3p0和jdbc的jar包,其余的就是spring和Hibernate的jar包 之后我们在src下新建一系列的包和类,dao层我们新建一个接口,在建一个接口的实现类,同样service层也是新建一个接口和实现类,再写一个测试的main方法,当然实体类肯定不能少 接下来新建一个spring的xml(app.xml),在这个xml中我们获得sessionfa

hibernate与spring整合

Spring与Hibernate整合关键点: 1) Hibernate的SessionFactory对象交给Spring创建: 2) hibernate事务交给spring的声明式事务管理. 1. DeptDao.java // 数据访问层 public class DeptDao { // Spring与Hibernate整合: IOC容器注入 private SessionFactory sessionFactory; public void setSessionFactory(Sessio