zoukankan      html  css  js  c++  java
  • 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();
        }
    }

    这样就极大简化了代码。

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

  • 相关阅读:
    "Key Violation" with ClientDataSet
    c# 的关键字 params,out,ref
    eval && JSON.parse
    json2.js
    C#中的索引器
    call , apply , caller , callee
    iphone&ipad图标去除高亮的光圈效果
    调用系统路线导航
    调科大讯飞出现的问题
    得到汉字首字母在表中的顺序位置
  • 原文地址:https://www.cnblogs.com/kingofkai/p/6015513.html
Copyright © 2011-2022 走看看