zoukankan      html  css  js  c++  java
  • Hibernate学习---第十四节:hibernate之session线程安全

    1、hibernate.cfg.xml 文件中添加如下代码开启线程安全:

    <property name="hibernate.current_session_context_class">thread</property>

    具体如下:

    <!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
            <property name="hibernate.connection.username">root</property>
            <property name="hibernate.connection.password">123456</property>  
            <property name="hibernate.hbm2ddl.auto">update</property>
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.current_session_context_class">thread</property>
            <mapping resource="learnhibernateeanPerson.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    2、测试:

    package learn.hibernate.test;
    
    import static org.junit.Assert.*;
    
    
    import learn.hibernate.bean.Person;
    
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.service.ServiceRegistry;
    import org.hibernate.service.ServiceRegistryBuilder;
    import org.junit.After;
    import org.junit.Before;
    import org.junit.Test;
    
    public class TestHibernate {
    
        SessionFactory factory = null;
        Session session = null;
        Transaction tx = null;
        
        /**
         * 测试之前初始化数据
         * @throws Exception
         */
        @SuppressWarnings("deprecation")
        @Before
        public void setUp() throws Exception {
            System.out.println("---------初始化数据----------");
            
            Configuration config = new Configuration().configure();
            ServiceRegistry sr = new ServiceRegistryBuilder()
            .applySettings(config.getProperties()).buildServiceRegistry();
            factory = config.buildSessionFactory(sr);
            //session = factory.openSession();
            // 获得一个线程安全的session,多线程环境下使用
            session = factory.getCurrentSession();
        }
    
        /**
         * 测试之后释放(销毁)数据
         * @throws Exception
         */
        @After
        public void tearDown() throws Exception {
            System.out.println("---------释放数据----------");
            // 获得的是线程安全的session,不需要程序控制关闭,事务提交后就会自动关闭
            /*if(session.isOpen()){
                session.close();
            }*/
        }
        
        /**
         * 批量写入数据
         */
        @Test
        public void testAdd(){
            tx = session.beginTransaction();
            
            Person person = new Person("admin", 22, 123456, null);
            session.persist(person);
            
            tx.commit();
        }
        
        @Test
        public void testGet(){
            // 如果获得的是线程安全的session,那么要开启事务
            tx = session.beginTransaction();
            Person p = (Person)session.get(Person.class, 12);
            System.out.println(p);
            tx.commit();
        }
    }
  • 相关阅读:
    javascript typeof 和 instanceof 的区别和联系
    || and && 理解
    jquery选择器总结
    overflow-y:auto 回到顶部
    HTML 获取屏幕,浏览器,页面的高度
    height()、innerHeight()、outerHeight()函数的区别详解
    git入门篇-----本地操作
    sublime快捷键
    Atom 和 VSCode 同一天发布神器:实时编码分享
    编辑器插件和配置备份神器--sync setting
  • 原文地址:https://www.cnblogs.com/hwlsniper/p/4296946.html
Copyright © 2011-2022 走看看