Spring学习——(六)Spring与Hibernate整合
来源:互联网 发布:mac开机后鼠标不能动 编辑:程序博客网 时间:2024/05/17 23:56
前面几部分已经基本介绍了Spring的IoC和AOP两大特性,下面就要开始研究和Hibernate等其他框架的整合。
首先来整合Hibernate。在实验中,我采用的是Spring4.2.5和Hibernate4.3.11。在Spring的参考文档中“Object Relational
Mapping (ORM) Data Access”一章讲了和ORM的整合,包括Hibernate、JPA、JDO等。在Spring4.2.5的文档中,明确标明了
Spring4支持的Hibernate3.6之后的版本,而且参考文档中也写的是Hibernate3的整合,所以在整合Hibernate4的时候就要注意了。
不过大致流程还是一致的。
首先第一步在Spring容器中设置SessionFactory,下面是参考文档中给出的例子:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="org.hsqldb.jdbcDriver"/> <property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/> <property name="username" value="sa"/> <property name="password" value=""/> </bean> <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="myDataSource"/> <property name="mappingResources"> <list> <value>product.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.HSQLDialect </value> </property> </bean>首先定义一个数据源,在这里采用的是DBCP(关于数据源的设置可以看前一节)。之后定义个SessionFactory的bean。注意这里
class,org.springframework.orm.hibernate3.LocalSessionFactoryBean,对应的是Hibernate3支持下的localsession,这种class仅
仅支持的是XML的Hibernate配置方式,不支持@Entity等Annotation。检查spring的orm jar包下的包,可以看到:
在Hibernate3中,为了能够使用Annotation的配置,在生成SessionFactory的bean时采用
org.springframework.orm.hibernate3.annotaion这个包下的 AnnotationSessionFactoryBean类,配置annotatedClasses属性即可以
设置实体类。而在Hibernate4中,一个包就包含了xml和annotation,直接采用org.springframework.orm.hibernate4包下的
LocalSessionFactory类来配置即可。例如:
<bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="DataSource" ref="myDataSource" /><property name="annotatedClasses"><list><value>cn.wqy.model.User</value></list></property></bean>这里通过property标签注入了DataSource和annotatedClasses。为什么Spring可以通过这种方式注入呢?学习了前面您的IoC就应该
可以推断出在org.springframework.orm.hibernate4.LocalSessionFactory类中含有DataSource和annotatedClasses两个属性和对应
的setter方法。验证确实含有。则在bean中配置了对应property之后就可以通过spring的IoC机制实现注入。
另,将数据源注入SessionFactory之后,为了配置hibernate的相关设置,需要加上“hibernateproperties”这个属性,在这个属性
下,可以配置之前在hibernate.cfg.xml配置的一些参数,例如:
<property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hibernate.show_sql">true</prop><prop key="hibernate.format_sql">true</prop></props></property>注意在LocalSessionFactory类中hibernateProperties定义的是一个Properties类型的属性,所以需要按照属性的赋值方式。
之后,在Impl中注入我们的SessionFactory,配置如下:
package cn.wqy.DAO;import javax.annotation.Resource;import javax.sql.DataSource;import org.apache.commons.dbcp.BasicDataSource;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.stereotype.Repository;import cn.wqy.model.User;@Repository("userDAO")public class UserDAOImpl implements UserDAO {private SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;}@Resourcepublic void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic void add(User user) {// TODO Auto-generated method stubSession session = sessionFactory.openSession();session.beginTransaction();session.save(user);session.getTransaction().commit();session.close();}}通过setter方法实现注入。由于在Xml文件中添加了Annotation的支持,所以@Resource即可。
最后配置实体类的Annotation。像之前学习hibernate那样设置@Entity,@Id,@GeneratedValue等注解。同时在
sessionFactory的bean配置下配置annotatedClasses,相当于之前在hibernate的配置文件中设置mapping class。
有另一种偷懒的方法,就是在sessionFactory的bean配置下配置packagesToScan,该属性是一个string类型的数组。
<property name="packagesToScan"><list><value>cn.wqy.model</value></list></property>配置了之后,Spring会自动扫描cn.wqy.model包下的所有类,将需要标为实体类的类自动mapping上。
至此,基本的Spring和Hibernate的整合完毕。
- Spring学习——(六)Spring与Hibernate整合
- Spring学习(六)spring整合注解形式的hibernate
- spring 学习之三(spring 与hibernate, struts2整合)
- Spring+hibernate+springmvc 整合(六)
- Spring学习(五)spring整合hibernate
- 【Spring】Spring与Hibernate整合(十六)
- WebService学习笔记(六)Spring与CXF整合服务端
- SSH与SSM学习之SSH整合06——Hibernate与Spring整合
- spring与hibernate整合
- Spring与Hibernate整合
- hibernate 与spring 整合
- Spring与Hibernate整合
- spring与hibernate整合
- Spring 与Hibernate 整合
- Spring与Hibernate整合
- Spring与Hibernate整合
- Spring与HIbernate整合
- Spring与Hibernate整合
- 第四周,项目5,递归求值(4)
- Objective-C Runtime
- jQuery.extend和jQuery.fn.extend的区别
- CodeForces 632D Longest Subsequence(数论)
- 第5周项目1-三角形类雏形(4)
- Spring学习——(六)Spring与Hibernate整合
- 什么是多路复用
- scrollView实践经验
- 太乐了
- GFS MapReduce BigTable关系
- POJ 3253 Fence Repair
- Linux tcpdump命令详解[转]
- algrothm_水仙花(三次方和)
- 随便写写: