zoukankan      html  css  js  c++  java
  • 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文件是已经封装好的,可以直接将内容复制过来正常使用,方便快捷。

  • 相关阅读:
    thinkphp 防止sql注入
    Thinkphp模板怎么使用自定义函数
    Jquery 获取文件内容
    php,Allowed memory size of 8388608 bytes exhausted (tried to allocate 1298358 bytes)
    thinkphp 定位查询 Model:last您所请求的方法不存在!
    if condition volist
    thinkPHP 无法create,无法插入数据,提示非法数据对象
    eclipse 最有用的10个快捷键
    button 禁止
    thinkphp显示重复两次
  • 原文地址:https://www.cnblogs.com/claricre/p/6498965.html
Copyright © 2011-2022 走看看