• Hibernate的简单封装Session(方便调用)


      因为每次用增删改查时都需要用到hibernate的配置来生成session工厂进而生成session,比较麻烦,所以我们直接封装一个可以调用的类,需要的时候只需要调用即可。

    新建一个HibernateUtil.java文件

    package com.model;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtil {
        private static final SessionFactory factory = builderFactory();//新建一个session工厂,定义为常量直接构建出来
        private static final ThreadLocal<Session> threadlock = new ThreadLocal<Session>();//构建一个线程锁,保证安全,实现单线程不被占用
        private static SessionFactory builderFactory() {
            Configuration config = new Configuration().configure();//读取hibernate配置
            return config.buildSessionFactory();
        }
        
        public static Session getSession(){
            //获取线程锁中的session
            Session session=threadlock.get();
            if(session==null){
                //如果为空,则表明会话没有,则可以新建会话
                session=factory.openSession();
                //把会话放到线程锁中
                threadlock.set(session);
            }
            return session;
        }
        public static void closeSession(){
            Session session=threadlock.get();
            if(session!=null){
                //不为空,则表明会话中有内容需要关闭
                session.close();
                //再将线程锁中的内容清空
                threadlock.set(null);
            }
        }
    }

    测试一下:

    package com.model;
    
    import org.hibernate.Session;
    
    public class TestFruit {
        public static void main(String[] args){
            Fruit f = new Fruit();
            f.setIds("q001");
            f.setName("草莓");
            f.setPrice(20.0);
            f.setSource("张店");
            f.setNumbers(200);
            f.setImage("hahh");
            Session session = null;
            try{
                session=HibernateUtil.getSession();
                session.beginTransaction();
                session.save(f);
                session.getTransaction().commit();
            }catch(Exception ex){
                ex.printStackTrace();
                session.getTransaction().rollback();
            }finally{
                HibernateUtil.closeSession();
            }
        }
    }

    效果如下:

    HibernateUtil.java文件是已经封装好的,可以直接将内容复制过来正常使用,方便快捷。

  • 相关阅读:
    $NOIp2018$劝退记
    Markdown 使用技巧
    【题解】 bzoj2462: [BeiJing2011]矩阵模板
    【总结】字符串hash
    【题解】 bzoj3555: [Ctsc2014]企鹅QQ (字符串Hash)
    【题解】 bzoj3916: [Baltic2014]friends (字符串Hash)
    【题解】 bzoj2982: combination (Lucas定理)
    【题解】 bzoj1135: [POI2009]Lyz (线段树+霍尔定理)
    【题解】 bzoj3693: 圆桌会议 (线段树+霍尔定理)
    【题解】 AtCoder ARC 076 F
  • 原文地址:https://www.cnblogs.com/claricre/p/6498965.html
Copyright © 2020-2023  润新知