云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > Spring+Hibernate

Spring+Hibernate

  • 62 次阅读
  • 3 次下载
  • 2025/12/10 17:14:16

Spring+Hibernate DAO 持久层开发,Spring 用Hibernate 访问数据库的三种… DAO开发 注:

(1)以下两者都需在Spring XML配置文件中,注册Bean(实现类)来依赖注入SessionFactory. (2.1)Spring 中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样,具体细节请参考jdk中有关动态代理的文档。本文主要讲解 如何在spring中进行事务控制。

(2.2)动态代理的一个重要特征是,它是针对接口的,所以我们的DAO要通过动态代理来让spring接管事务,就必须在DAO前面抽象出一个接口. 当然

如果没有这样的接口,那么spring会使用CGLIB来解决问题,但这不是spring推荐的方式.

(一)直接使用Hibernate API (不推荐使用) public class DaoImp implate Dao{

private SessionFactory sessionFactory;

private static String hql = \

public void setSessionFactory(SessionFactory sessionFactory){ this.sessionFactory=sessionFactory; }

public boolean isValidUser(String username) { try{

List userList =

sessionFactory.getCurrentSession().creatQuery(hql).setParameter(0,username).list(); if (userList.size() > 0) { return true;

} catch (HibernateException ex){

throw converHibernaterAccessException(ex); } } }

优点:与Spring框架完全分离

缺点:(1)无法使用Spring框架封装所提供的额外功能.如,直接使用Hibernate API 需用try...catch()处理HibernateException异常.

(2)需在实现类中加入setSessionFactory(SessionFactory sessionFactory)属性,接收依赖注入的SessionFactory.

(二)继承 Spring 的 HibernateDaoSupport 使用 HibernateTemplate (不推荐使用getSession()) public class DaoImp extend HibernateDaoSupport implates Dao{

private static String hql = \ public boolean isValidUser(String username) {

List userList = getHibernateTemplate().find(hql,username); if (userList.size() > 0) { return true; }

public boolean isValidUser(String username,String password) throw DataAccessException {

Session session = getSession(); //不推荐使用,用完后需手动关闭 String[] userlist=new String[2]; userlist[0]=username; userlist[1]=password; try{

List userList = session.find(hql,userlist); //Hibernate语句; session.close(); if (userList.size() > 0) { return true;

} catch (HibernateException ex){

throw converHibernaterAccessException(ex); } } }

特点:对HibernateTemplate没有提供的功能,可以直接调用HibernateDaoSuppor对象的getSession()方法(极其不推荐使用)得到Session对象实例用try{ Hibernate API }catch (HibernateException ex )操作.

(三)对 HibernateTemplate 没有提供的功能, 还可以用HibernateCallback 回调的方法管理数据库. (极其推荐) /**

* 使用 hql 语句进行操作

* @param hql HSQL 查询语句 * @param offset 开始取数据的下标 * @param length 读取数据记录数 * @return List 结果集 */

public List getListForPage ( final String hql , final int offset , final int length ) { List list = getHibernateTemplate().executeFind ( new HibernateCallback ( ) {

public Object doInHibernate ( Session session ) throws HibernateException, SQLException {

Query query = session.createQuery ( hql ) ; query.setFirstResult ( offset ) ; query.setMaxResults ( length ) ;

//query.setCacheable(false);

// for (int i = 0; i < values.length; i++) { // query.setParameter(i, values[i]); // }

List list = query.list ( ) ; return list ; } }) ; return list ; }

/*

spring+hibernate架构中Dao访问数据库的几种方法

在spring+hibernate的架构中,访问数据库有几种方法,按spring依赖注入来区分有3种,在这之前先再来了解一下spring的依赖注入,spring主要的两大核心就是IOC(控制反转)和AOP(面向切面编程),控制反转就是控制转移,从以往由Bean去控制要调用的接口或其他资源转移给容器,由容器来寻找并实例化要调用的接口,也可以解释成依赖注入,即在spring配置文件中把要调用的接口、设置、构造子配置给Bean。

这边是以依赖注入来区分为sessionFactory、hibernateTemplate、jdbcTemplate,本质上划分只有hibernateTemplate和jdbcTemplate这两种。 1、注入sessionFactory

在spring配置文件中,对Dao注入sessionFactory,即:

这边sessionFactory依赖注入的不是给Dao层中的类,而是给HibernateDaoSupport,见spring源文件org/springframework/orm/hibernate3/support/HibernateDaoSupport.java里面,就有sessionFactory的set、get操作:

public final void setSessionFactory(SessionFactory sessionFactory) { this.hibernateTemplate = createHibernateTemplate(sessionFactory); //通过sessionFactory来生成hibernateTemplate }

public final SessionFactory getSessionFactory() {

return (this.hibernateTemplate != null ? this.hibernateTemplate.getSessionFactory() : null); }所以在Dao层中类继承HibernateDaoSupport,即可通过this.getHibernateTemplate()来对数据库进行操作,

更新数据:this.getHibernateTemplate().update(bo); 查询数据:this.getHibernateTemplate().find(bo); 添加数据:this.getHibernateTemplate().save(bo) ; 删除数据:this.getHibernateTemplate().delete(bo);

从上面可以看出spring+hibernate的强大威力,存取数据不用像以往jdbc那样,要写一大串try,catch语句,还要连接数据库,用完再关闭数据库连接,而用一条语句就可以搞定。

这里sessionFactory由spring自动自动连接、关闭,当然你也可以手动来连接、关闭,如下面采用的方法:

Session session=this.getHibernateTemplate().getSessionFactory().openSession(); Transaction tx=session.beginTransaction(); /*--------------查询数据------------------------*/ String str=\

Query query=session.createQuery(str); List list=query.list();

/*--------------删除数据------------------------*/ session.load(bo,ID); session.delete(bo);

/*--------------添加数据------------------------*/ session.save(bo);

/*--------------修改数据-----------------------*/ session.load(bo,ID); session.update(bo);

/*--------------end---------------------------*/ tx.commit(); session.close();

初学Hebernate的人对这些代码应该很熟悉,没有spring提供hibernateTemplate,在单单的Hibernate

搜索更多关于: Spring+Hibernate 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

Spring+Hibernate DAO 持久层开发,Spring 用Hibernate 访问数据库的三种… DAO开发 注: (1)以下两者都需在Spring XML配置文件中,注册Bean(实现类)来依赖注入SessionFactory. (2.1)Spring 中进行事务管理的通常方式是利用AOP(面向切片编程)的方式,为普通java类封装事务控制,它是通过动态代理实现的,由于接口是延迟实例化的, spring在这段时间内通过拦截器,加载事务切片。原理就是这样,具体细节请参考jdk中有关动态代理的文档。本文主要讲解 如何在spring中进行事务控制。 (2.2)动态代理的一个重要特征是,它是针对接口的,所以我们的DAO要通过动态代理来让spring接管事务,就必须在DAO前面抽象出一个接口. 当然 如果没有这样的接口

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com