第5章 Spring的ORM模块.doc_第1页
第5章 Spring的ORM模块.doc_第2页
第5章 Spring的ORM模块.doc_第3页
第5章 Spring的ORM模块.doc_第4页
第5章 Spring的ORM模块.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章 Spring的ORM模块本章学习目的和要求简本章重点和难点ORM模块对Hibernate、JDO、TopLink、iBatis等ORM框架提供支持。本节以Hibernate为例介绍ORM模块。Spring支持的ORM方式类似于对JDBC的支持,例如在Dao层提供HibernateDaoSupport类与HibernateTemplate类。ORM模块依赖于dom4j-1.6.jar、antlr.jar,Eclipse自带的Spring ORM类库可能没有这两个类库,需要自己添加。5.1 实例:保存Cat实体在Spring里,Hibernate的资源要交给Spring来管理。Hibernate及其SessionFactory等只是Spring的一个特殊的Bean,由Spring负责实例化与销毁。因此,DAO层只需要继承HibernateDaoSupport,而不需要与Hibernate的API打交道,不需要开启、关闭Hibernate的Session、Transaction,Spring会自动维护这些对象。5.1.1 Cat实体类代码看一个例子。本例将使用Spring的ORM模块保存、读取Cat实体类。实体类Cat的代码为(getter、setter略):Cat.javapackage com.helloweenvsfei.spring.orm;import java.util.Date;import javax.persistence.*;Entity /实体类配置Table(name=tb_cat) /表配置public class CatId /主键配置GeneratedValue(strategy=GenerationType.AUTO) /主键规则配置private Integer id;private String name; /使用默认配置Temporal(value = TemporalType.TIMESTAMP) /列类型为timestampprivate Date createdDate;5.1.2 DAO层接口DAO层接口定义了操作Cat的方法。代码为:ICatDao.javapackage com.helloweenvsfei.spring.orm;import java.util.List;public interface ICatDao/DAO接口public void createCat(Cat cat); /保存对象public List listCats(); /查询所有对象public int getCatsCount(); /返回对象数量public Cat findCatByName(String name); /根据名字查询对象5.1.3 继承HibernateDaoSupportDAO实现ICatDao接口,并继承Spring ORM模块的HibernateDaoSupport。HibernateDaoSupport封装了Hibernate,提供HibernateTemplate对象。代码为:CatDaoImpl.javapackage com.helloweenvsfei.spring.orm;import java.util.List;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;public class CatDaoImpl extends HibernateDaoSupport implements ICatDao/继承Supportpublic void createCat(Cat cat)/保存对象this.getHibernateTemplate().persist(cat); /使用Template保存public int getCatsCount()/查询记录条数return (Integer) this.getSession(true).createQuery(/调用Hibernate保存 select count(c) from Cat c ).uniqueResult();public List listCats()/查询所有的Catreturn this.getHibernateTemplate().find( select c from Cat c ); /使用Template查询 public Cat findCatByName(String name)/根据名字查询CatList catList = this.getHibernateTemplate().find(/使用Template select c from Cat c where = ? , name);if (catList.size() 0) /如果有数据return catList.get(0); /返回第一条return null;一般使用Spring提供的HibernateTemplate就可以了。也可以通过调用getSession()获取Hibernate的Session,利用Hibernate API操作。5.2 配置集成Hibernate传统上讲,Spring需要一个配置文件,Hibernate也需要一个配置文件。在Spring中,可以只使用Spring的配置文件。看一下Hibernate在Spring中的配置。5.2.1 Spring中配置Hibernate由于Hibernate全部交给Spring来管理,Hibernate不再需要自己的配置文件,所有的参数都配置在Spring配置中。Spring需要配置数据源、SessionFactory及CatDaoImpl,代码为:applicationContext.xml !- 该Package下所有类都会被当作实体类加载-com.helloweenvsfei.spring.orm.Catorg.hibernate.dialect.MySQLDialecttruetruecreate本例中Hibernate实体类采用Java注解的方式配置ORM映射,因此SessionFactory采用Spring的AnnotationSessionFactoryBean。实体类、Hibernate属性等都配置在SessionFactory中。本例仍然使用create策略自动创建数据库脚本。5.2.2 运行代码下面的代码中从Spring容器中获取Dao对象,实例化一个Cat对象、并持久化到数据库中。运行代码为:OrmRun.javapackage com.helloweenvsfei.spring.orm;import java.util.*;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.core.io.ClassPathResource;public class OrmRunpublic static void main(String args)XmlBeanFactory factory = new XmlBeanFactory(/加载工厂new ClassPathResource(applicationContext.xml);ICatDao catDao = (ICatDao) factory.getBean(catDao); /获取DAO对象Cat cat=new Cat(); /实例化Catcat.setName(Hello Kitty); /设置namecat.setCreatedDate(new Date(); /设置createdDatecatDao.createCat(cat); /保存进数据库List catList=catDao.listCats(); /查询所有的Catfor (Cat c : catList)/遍历System.out.println(Name: + c.getName(); / 输出名字运行效果如图5.1。图5.1 OrmRun运行效果5.2.3 配置xml文件实体 如果Hibernate实体类是采用xml文件配置的,配置SessionFactory需要使用LocalSessionFactoryBean。配置为:classpath:/com/helloweenvsfei/spring/orm/Cat.hbm.xmlorg.hibernate.dialect.MySQLDialecttruefalseupdateorg.hibernate.cache.EhCacheProvidertrue5.3 管理Hibernate事务Spring同样能灵活配置Hibernate的事务,方式与JDBC事务管理类似,例如使用HibernateTransactionManager作为Hibernate的事务管理者,使用代理类TransactionProxyFactoryBean配置被管理者。5.3.1 Service接口Spring默认在DAO层添加事务,DAO层的每个方法为一个事务。Spring+Hibernate编程中,习惯的做法是在DAO层上再添加一个Service层,然后把事务配置在Service层上。Service接口代码为:ICatService.javapackage com.helloweenvsfei.spring.orm;import java.util.List;public interface ICatService/Service接口。将会在Service层添加事务public void createCat(Cat cat);public List listCats();public int getCatsCount();分层的做法是,程序调用Service层,Service层调用Dao层,Dao层调用Hibernate实现数据读取,原则上不允许跨层访问。分层使业务层次更加清晰。5.3.2 Service实现代码CatServiceImpl实现了ICatService接口。代码中定义了一个Dao类型属性,以及getter、setter方法。代码为:CatServiceImpl.javapackage com.helloweenvsfei.spring.orm;import java.util.List;public class CatServiceImpl implements ICatService/Service接口实现private ICatDao catDao; /DAO对象public ICatDao getCatDao()/catDao的getter方法return catDao;public void setCatDao(ICatDao catDao)/catDao的setter方法this.catDao=catDao;public void createCat(Cat cat)/保存Catif(catDao.findCatByName(cat.getName()!=null)/检查同名Cat是否存在throw new RuntimeException(猫 + cat.getName() + 已经存在。 ); / 抛出异常catDao.createCat(cat); /如果不存在,则创建public int getCatsCount()/返回记录总数return catDao.getCatsCount(); /调用DAOpublic List listCats()/返回所有的Catreturn catDao.listCats(); /调用DAO5.3.3 在Service层配置事务把CatServiceImpl配置为事务管理的对象:applicationContext.xmlPROPAGATION_REQUIRED运行代码略。5.4 集成JPASpring从2.0版本起开始支持JPA。在Spring中使用JPA类似于在Spring中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论