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();
        }
    }
  • 相关阅读:
    面试中变相考算法复杂度
    黑马程序猿——JAVA面向对象的特性:封装,继承,多态
    Supermap 组合单值专题图与标签专题图演示样例
    线段树 hdu3642 Get The Treasury
    servlet学习(1)
    Androidbutton事件的五中写法总结
    Java多线程的调度策略
    linux命令行学习-dig(DNS查询器)
    kettle(一)概述
    学习C语言,困难吗?
  • 原文地址:https://www.cnblogs.com/hwlsniper/p/4296946.html
Copyright © 2011-2022 走看看