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

来源:互联网 发布:淘宝用户说怎么设置 编辑:程序博客网 时间:2024/06/18 10:16

 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等方法,可完全把这些代码放置到模板类中,不仅仅减少了代码量,同时代码也更加简洁

 

原创粉丝点击