Hibernate-模板模式

在我的博客《Hibernate总结(一)》在对数据库的增删改查前后重复的使用了得到Session与关闭Session等操作,因此我想到了模板设计模式。

模板设计模式概述:

  定义一个操作中的算法的骨架,而将步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤。

废话不多说,先贴上之前的代码:

public class a {
    
    public static void main(String[] args){
        Configuration config=new Configuration().configure();
        SessionFactory sf=config.buildSessionFactory();
        Session s=sf.openSession();
        sf.getCurrentSession();
        
        User u=new User();
        u.setAge(21);
        u.setName("King");
        s.save(u);

        s.close();
        sf.close();
    }
}

在这里大量重复了得到Session与关闭Session的操作,因此使用模板设计模式:

废话不多说,上代码

public abstract class Template {//抽象父类,定义了算法骨架
    
    public abstract void fun1(Session s);//子类中要实现的功能
    
    public void execute(){
        Configuration config=new Configuration().configure();
        SessionFactory sf=config.buildSessionFactory();
        Session s=sf.openSession();
        Transaction tran=null;
        try {
            tran=s.beginTransaction();
            
            fun1(s);
            
            tran.commit();
        } catch(Exception e) {
            if(tran!=null){
                tran.rollback();
            }
            e.printStackTrace();
        } finally{
            s.close();
            sf.close();
        }
    }
}

而我们这么使用:

public class a {
    
    public static void main(String[] args){
        new Template(){//在此使用Java匿名内部类
            @Override
            public void fun1(Session s) {
                User u=new User();
                u.setAge(21);
                u.setName("King");
                s.save(u);
            }
        }.execute();
    }
}

这样就极大简化了代码。

当然,到了这里,你是否想起了代理模式呢,静态代理与动态代理模式,下一篇将和大家分享代理设计模式...

 

posted @ 2016-10-31 13:08  欲戴王冠.必承其重  阅读(961)  评论(0编辑  收藏  举报