Hibernate与Spring集成示例

写了MyBatis与Spring的集成,今天写写Hibernate与Spring的集成。以前是别人集成好了自己直接用,今天自己集成一下。与MyBatis学习笔记系列一样,本篇依然采用courseman数据库(数据库的创建请参见笔者博客:MyBatis入门示例),及ant来管理工程(对ant不熟悉的朋友请参见笔者的相关博客:ant的下载与安装,香港服务器租用,ant入门示例,)。本示例的任务是根据教师ID读取教师记录(教师类和表结构请参见笔者博客:MyBatis的association示例)。

一、版本说明

Spring:3.1.2。

Hibernate:3.6.7.Final。

本示例提供源码下载(点此进入源码下载页面),因此需要的jar包就不一一赘述。

二、Spring的配置

配置文件(beans.xml)的内容如下:

需要注意的是,以上sessionFactory的配置有其特殊之处。它的class是org.springframework.orm.hibernate3.LocalSessionFactoryBean,此类实现了Srping中的一个接口org.springframework.beans.factory.FactoryBean,这个接口声明了一个方法getObject()。这意味着,当我们要引用sessionFactory这个bean的时候,返回的不是类LocalSessionFactoryBean的实例,而是此实例的getObject()方法的返回值。而LocalSessionFactoryBean对此方法的实现(实际上是从AbstractSessionFactoryBean继承而来),是返回了一个SessionFactory对象。也就是说,LocalSessionFactoryBean的实例是用来生成SessionFactory对象的工厂。

这与MyBatis和Spring的集成是一样的(请参见笔者博文:MyBatis与Spring集成示例),香港虚拟主机,看来天下乌鸦一般黑啊!不过这倒是减轻了我们的学习、记忆负担。所不同的是,MyBatis的SqlSessionFactoryBean(类似于LocalSessionFactoryBean)是MyBatis自己实现的,而LocalSessionFactoryBean是Spring实现的。原因是Spring 3未提供与MyBatis 3的集成,MyBatis只好自己亲自上阵了(相关信息英文请参见:,中文请参见:)。

三、Hibernate的配置

Hibernate的核心配置文件hibernate.cfg.xml的内容如下:

Spring还提供了一种配置方式,可代替hibernate.cfg.xml。配置如下(配置文件是工程根目录下的beans2.xml):

教师实体映射文件内容如下:

四、执行类

执行类(HibernateSpringDemo.java)的代码如下。

修改ant的build.xml文件的run target,指定此类为执行类。

执行结果如下:

五、可能会遇到的错误

1、缺少javassist包

对于需要的jar包,笔者并没有一次性把Spring和Hibernate提供的所有jar包全部用上,而是根据编译、运行时报出的找不到类的异常信息,找到相关的jar包,然后再复制到工程的lib目录下。然而,在编程过程中,却遇到了这个错误:java.lang.ExceptionInInitializerError,香港服务器,内嵌的异常是:org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]。上网查询,才得知是少了javassist包。感到奇怪的是,这次却没有报找不到类的异常信息。Hibernate发布包下有个lib目录,存放着Hibernate的jar包。它有个required(必需的)子目录,javassist包就在此目录下。既然是必需的,那就把此目录下的jar包全部用上吧,免得再出错后又得花上不少时间来排错。

2、字符集问题

hibernate.cfg.xml的编码本为utf-8,添加中文注释后报错:Could not parse configuration。把编码改为utf8或gbk后即可解决此问题。对于这个问题,Spring、MyBatis和ant,都是一个德行(请参见笔者博文“MyBatis与Spring集成示例”中的第五部分可能会遇到的错误中的“2、字符集问题”)。

本文出自 “肖凡的专栏” 博客,请务必保留此出处

旅行还在继续,这个过程是艰难而又孤单的。

Hibernate与Spring集成示例

相关文章:

你感兴趣的文章:

标签云: