HibernateCallBack原理以及利用回调接口优化代码结构 .

 http://blog.csdn.net/myxx520/article/details/5767659

Hibernate 为我们提供一套很好的数据持久化解决方案,同时Spring也为我们封装了很多模板方法,比如

实现HibernateDaoSupport后得到模板操作对象以及一些回调接口,如HibernateCallback,jdbcTemplete等,这些模板方法

大大的减少了我们的代码量,同时使得代码干净明了,今天谈谈我对HibernateCallBack的理解以及应用

首先,我们定义一个回调接口,回调接口的参数是一个上下问参数

 

package example;
import org.hibernate.Session;
/**
 * 定义回调接口
 * 
 * @author Jack Zhang
 * @date 2010-07-25
 */
public interface CallBackInterface {
	public void invoke(Session obj);
}

定义个一模块操作类,将Hibernate中常用的OpenSession ,CloseSession,以及一些事物处理抽取出来作为模板对象

package example;

import org.hibernate.Session;
import com.kiloway.equipment.utils.HibernateSessionFactory;

/**
 * 定义模板方法
 * 
 * @author Jack Zhang
 */
public class JdbcTemplete {
	// 将实体对象持久化
	public void persist(CallBackInterface action) {
		Session session = null;
		try {
			session = HibernateSessionFactory.getSession();
			session.beginTransaction();
			// 通过接口进行回调
			action.invoke(session);
			session.getTransaction().commit();
		} catch (Exception e) {
			session.getTransaction().rollback();
			e.printStackTrace();
		} finally {
			session.close();
		}
	}
}


 

其中 action.invoke(session);是回调的关键,在JdbcTemplete中,action是一个接口,在实际调用过程中,使用匿名的内部类实现该接口,进行调用,如:

package example;

import org.hibernate.Session;

/**
 * @author Jack
 * @date 2010-07-26
 * 测试回调接口
 */
public class Test {
	public static void main(String[] args) {
		JdbcTemplete jdbcTemplete = new JdbcTemplete();
		jdbcTemplete.persist(new CallBackInterface() {
			public void invoke(Session obj) {
				obj.save("OBJECT");
				
			}
		});
	}
}


 

这样,我们就不用在每个持久化对象中定义,openSession ,closeSession等方法,可完全把这些代码放置到模板类中,不仅仅减少了代码量,同时代码也更加简洁

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值