知识点
相关文章
更多最近更新
更多【第八章】 对ORM的支持 之 8.2 集成Hibernate3 ——跟我学spring3
2019-03-01 14:27|来源: 开涛
8.2 集成Hibernate3
Hibernate是全自动的ORM框架,能自动为对象生成相应SQL并透明的持久化对象到数据库。
Spring2.5+版本支持Hibernate 3.1+版本,不支持低版本,Spring3.0.5版本提供对Hibernate 3.6.0 Final版本支持。
8.2.1 如何集成
Spring通过使用如下Bean进行集成Hibernate:
LocalSessionFactoryBean :用于支持XML映射定义读取:
configLocation和configLocations:用于定义Hibernate配置文件位置,一般使用如classpath:hibernate.cfg.xml形式指定;
mappingLocations :用于指定Hibenate映射文件位置,如chapter8/hbm/user.hbm.xml;
hibernateProperties:用于定义Hibernate属性,即Hibernate配置文件中的属性;
dataSource:定义数据源;
hibernateProperties、dataSource用于消除Hibernate配置文件,因此如果使用configLocations指定配置文件,就不要设置这两个属性了,否则会产生重复配置。推荐使用dataSource来指定数据源,而使用hibernateProperties指定Hibernate属性。
AnnotationSessionFactoryBean:用于支持注解风格映射定义读取,该类继承LocalSessionFactoryBean并额外提供自动查找注解风格配置模型的能力:
annotatedClasses:设置注解了模型类,通过注解指定映射元数据。
packagesToScan:通过扫描指定的包获取注解模型类,而不是手工指定,如“cn.javass.**.model”将扫描cn.javass包及子包下的model包下的所有注解模型类。
接下来学习一下Spring如何集成Hibernate吧:
1、准备jar包:
首先准备Spring对ORM框架支持的jar包:
org.springframework.orm-3.0.5.RELEASE.jar //提供对ORM框架集成 |
下载hibernate-distribution-3.6.0.Final包,获取如下Hibernate需要的jar包:
下载slf4j-1.6.1.zip(http://www.slf4j.org/download.html),slf4j是日志系统门面(Simple Logging Facade for Java),用于对各种日志框架提供给一致的日志访问接口,从而能随时替换日志框架(如log4j、java.util.logging):
将这些jar包添加到类路径中。
2、对象模型定义,此处使用第七章中的UserModel:
3、Hibernate映射定义(chapter8/hbm/user.hbm.xml),定义对象和数据库之间的映射:
4、 数据源定义,此处使用第7章的配置文件,即“chapter7/ applicationContext-resources.xml”文件。
5、 SessionFactory配置定义(chapter8/applicationContext-hibernate.xml):
6、 获取SessionFactory:
此处我们使用了chapter7/applicationContext-resources.xml定义的“dataSource”数据源,通过ctx.getBean("sessionFactory", SessionFactory.class)获取SessionFactory。
7、通过SessionFactory获取Session对象进行创建和删除表:
使用SessionFactory创建Session,然后通过Session对象的createSQLQuery创建本地SQL执行创建和删除表。
8、使用SessionFactory获取Session对象进行持久化数据:
使用SessionFactory获取Session进行操作,必须自己控制事务,而且还要保证各个步骤不会出错,有没有更好的解决方案把我们从编程事务中解脱出来?Spring提供了HibernateTemplate模板类用来简化事务处理和常见操作。
8.2.2 使用HibernateTemplate
HibernateTimplate模板类用于简化事务管理及常见操作,类似于JdbcTemplate模板类,对于复杂操作通过提供HibernateCallback回调接口来允许更复杂的操作。
接下来示例一下HibernateTemplate的使用:
通过new HibernateTemplate(sessionFactory) 创建HibernateTemplate模板类对象,通过调用模板类的save方法持久化对象,并且自动享受到Spring管理事务的好处。
而且HibernateTemplate 提供使用HibernateCallback回调接口的方法execute用来支持复杂操作,当然也自动享受到Spring管理事务的好处。
8.2.3 集成Hibernate及最佳实践
类似于JdbcDaoSupport类,Spring对Hibernate也提供了HibernateDaoSupport类来支持一致的数据库访问。HibernateDaoSupport也是DaoSupport实现:
接下来示例一下Spring集成Hibernate的最佳实践:
1、 定义Dao接口,此处使用cn.javass.spring.chapter7.dao. IUserDao:
2、 定义Dao接口实现,此处是Hibernate实现:
此处注意首先Hibernate实现放在dao.hibernate包里,其次实现类命名如UserHibernateDaoImpl,即×××HibernateDaoImpl,当然如果自己有更好的命名规范可以遵循自己的,此处只是提个建议。
3、进行资源配置,使用resources/chapter7/applicationContext-resources.xml:
4、dao定义配置,在chapter8/applicationContext-hibernate.xml中添加如下配置:
首先定义抽象的abstractDao,其有一个sessionFactory属性,从而可以让继承的子类自动继承sessionFactory属性注入;然后定义userDao,且继承abstractDao,从而继承sessionFactory注入;我们在此给配置文件命名为applicationContext-hibernate.xml表示Hibernate实现。
5、 最后测试一下吧(cn.javass.spring.chapter8. HibernateTest):
和Spring JDBC框架的最佳实践完全一样,除了使用applicationContext-hibernate.xml代替了applicationContext-jdbc.xml,其他完全一样。也就是说,DAO层的实现替换可以透明化。
8.2.4 Spring+Hibernate的CRUD
Spring+Hibernate CRUD(增删改查)我们使用注解类来示例,让我们看具体示例吧:
1、首先定义带注解的模型对象UserModel2:
使用JPA注解@Table指定表名映射;
使用注解@Id指定主键映射;
使用注解@ Column指定数据库列映射;
2、 定义配置文件(chapter8/applicationContext-hibernate2.xml):
2.1、 定义SessionFactory:
此处使用AnnotationSessionFactoryBean通过annotatedClasses属性指定注解模型来定义映射元数据;
2.2、定义HibernateTemplate :
3、最后进行CURD测试吧:
Spring集成Hibernate进行增删改查是不是比Spring JDBC方式简单许多,而且支持注解方式配置映射元数据,从而减少映射定义配置文件数量。
本文链接:领悟书生教程网,转自http://sishuok.com/forum/blogPost/list/0/2497.html
相关问答
更多-
Java 2 实用教程第八章[2023-07-22]
请问你是想把你输入的数字保存到文本区的,,, 而大于1000个字符后,,,你无法确定是否需要保存到文本区吗? 对于以上, 我的理解是,你完全可以设定文本框最大字符长度。。 -
给出你的AdminsDAO类,你的AdminsDAO类的SessionFactory可能没有注入成功,还有你的spring是怎么启动的还贴出来
-
我给了你我毕业项目 oracle的 脚本在里面
-
我已更新到Appium 1.6.3和Xcode 8.2,并且应用程序正确启动。 我不得不添加一个使用XCUITest的新功能 automationName: 'XCUITest' I have updated to Appium 1.6.3 and Xcode 8.2 and the application launches correctly. I have had to add a new Capability for using XCUITest automationName: 'XCUITes ...
-
代码完成也停止在Xcode 8.2.1中为我工作,并且没有数量的清理,派生数据丢失或重新启动修复它。 过了一会儿,我意识到代码完成只是在我正在开展的扩展范围内被破坏。 如果手动键入,代码将被正确突出显示,并且可以编译好,因此源代码不会抛出任何解析器负责代码完成的问题。 这是一个特定的上下文,在这个非常简单的例子中: struct SomeStruct { static let foobar1 = { return NSBezierPath() }() } extensi ...
-
如果你跑 mvn dependency:tree 你会看到所有的依赖。 它们将以树形视图显示(如命令所示)。 I dont know what the issue was but I created a new webapp and copied in my source and the pom.xml and everything is working great
-
BlobByteArrayType可让您将任意字节数组映射到数据库中的Blob字段。 hibernate的二进制类型允许您将字节数组映射到varbinary字段。 在MySQL中 ,Blob与varbinary非常相似,但它可以随意增长。 The BlobByteArrayType lets you map arbitrary byte array into a Blob field in the database. The binary type of hibernate allows you to ma ...
-
Spring只能处理它创建的对象。 它不能将其他bean注入它无法管理的实例中。 这就是你在这里所做的 userDAO u = new userDAO(); 你是自己创造的,所以Spring对此一无所知,也没有注入这个领域 @Autowired private SessionFactory sessionFactory; 相反,将userDao bean自动装入您的@Controller类。 @Autowired private userDao userDao; 并使用它。 Spring can on ...
-
Windows 7的官方微软支持已经结束或即将结束。 如果微软不支持操作系统,那么Sitecore就不会这样做了。 Windows生命周期实况报道 Official Microsoft Support for Windows 7 has ended or is ending. If Microsoft won't support the OS, it stands to reason Sitecore will not. Windows lifecycle fact sheet
-
以下是错误消息的相关部分: NoSuchBeanDefinitionException: No matching bean of type [org.hibernate.SessionFactory] 问题是AnnotationSessionFactoryBean没有实现org.hibernate.SessionFactory接口。 要获得其中一个,您需要调用buildSessionFactory方法。 Here is the relevant part of the error message: NoS ...