Hibernate学习---第十五节:hibernate之session线程安全

来源:互联网 发布:三枪内裤怎么样 知乎 编辑:程序博客网 时间:2024/05/21 05:19

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="learn\hibernate\bean\Person.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();    }}
复制代码
阅读全文
0 0
原创粉丝点击