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();
        }
    }

    这样就极大简化了代码。

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

  • 相关阅读:
    Maven错误recv failed
    eclipse集成tomcat修改字符集参数
    eclipse luna 无法安装veloeclipse问题
    TortoiseSVN忽略文件夹
    类之特性
    __new()__与__init__()
    flask中models设计
    flask读书记录
    JS中的event 对象详解
    redis 持久化 RDB
  • 原文地址:https://www.cnblogs.com/kingofkai/p/6015513.html
Copyright © 2011-2022 走看看