一、Hibernate配置连接池及session线程绑定
1、导入c3p0连接池jar包
2、在主配置文件中配置连接池提供商及线程绑定
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!-- 把session绑定到当前线程上 -->
<property name="hibernate.current_session_context_class">thread</property>
3、HibernateUtil中编写获取本地线程的方法
注意:当我们把Session对象绑定到当前线程之后,就不用关闭了,hibernate就会给我们关了。
/**
* 从当前线程上获取Session
* @return
*/
public static Session getCurrentSession(){
return factory.getCurrentSession();
}
4、测试连接池及绑定线程的代码
package cn.itcast.test;
import java.sql.Connection;
import java.sql.SQLException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.jdbc.Work;
import org.junit.Test;
import cn.itcast.domain.Customer;
import cn.itcast.utils.HibernateUtil;
/**
* hibernate的验证连接池和绑定线程
*
*/
public class HibernateDemo3 {
/**
* 验证C3P0连接池是否配置成功
*/
@Test
public void test1(){
Session s = HibernateUtil.openSession();
s.doWork(new Work() {
@Override
public void execute(Connection connection) throws SQLException {
System.out.println(connection);
}
});
}
/**
* 验证绑定线程是否成功
*
* 细节:
* 当我们把Session对象绑定到当前线程之后,就不用关闭了,hibernate就会给我们关了。
*/
@Test
public void test2(){
Session s1 = HibernateUtil.getCurrentSession();
Session s2 = HibernateUtil.getCurrentSession();
System.out.println(s1 == s2);
}
}