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

    这样就极大简化了代码。

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

  • 相关阅读:
    Hyper-V无法启动虚拟机因为虚拟机监控程序未运行
    SpringBoot项目中自动加载datasourceConfig配置导致启动失败
    redis 数据类型与命令
    Redis入门与安装,与配置
    MySQL 主从配置
    MySql 中的事务
    什么是Docker?
    window10下安装Docker
    Docker 常见命令
    原生SQL语句
  • 原文地址:https://www.cnblogs.com/kingofkai/p/6015513.html
Copyright © 2011-2022 走看看