• 管理Session


    1:把session和本地线程绑定在一起。

    1):创建一个sessionFactory。然后由它去创建session

    package com.hq.util;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;
    
    public class HibernateUtils {
        
        private HibernateUtils(){}
        
        private static HibernateUtils instance=new HibernateUtils();
        
        public static HibernateUtils getInstance(){
            return instance;
        }
        
        private SessionFactory sessionFactory;
        public SessionFactory getSessionFactory() {
            if (sessionFactory == null) {
                Configuration configuration = new Configuration().configure();
                ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                        .applySettings(configuration.getProperties())
                        .buildServiceRegistry();
                sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            }
            return sessionFactory;
        }
        
        public Session getSession(){
            return getSessionFactory().getCurrentSession();
        }
    }

    使用:getCurrentSession()方法。

    2):通过单例的HibernateUtils来得到session

    public class DeptDao {
        public void save(Department dept){
            Session session=HibernateUtils.getInstance().getSession();
            System.out.println(session.hashCode());
    //        session.save(dept);
        }
        
    }

    3):在配置文件中配置

    <!-- 配置管理session的方法 -->
            <property name="current_session_context_class">thread</property>

    4):测试

    @org.junit.Test
        public void testSession(){
                    //获取 Session
                    //开启事务
                    Session session = HibernateUtils.getInstance().getSession();
                    System.out.println("-->" + session.hashCode());
                    Transaction transaction = session.beginTransaction();
                    DeptDao departmentDao = new DeptDao();
                    
                    Department dept = new Department();
                    dept.setName("ATGUIGU");
                    
                    departmentDao.save(dept);
                    departmentDao.save(dept);
                    departmentDao.save(dept);
                    
                    //若 Session 是由 thread 来管理的, 则在提交或回滚事务时, 已经关闭 Session 了. 
                    transaction.commit();
                    System.out.println(session.isOpen()); 
        }
  • 相关阅读:
    移除roadhog用webpack4代替
    git pull request
    java 希尔排序 归并排序 快速排序 三路快速排序
    简洁的 async await
    react-navigation 实现简单登录 跳转路由
    d3序数比例尺理解
    echarts vue 甘特图实现
    element table 实现鼠标拖拽选中
    CSS一些总结
    Nginx location 匹配规则
  • 原文地址:https://www.cnblogs.com/bulrush/p/7881697.html
Copyright © 2020-2023  润新知