单例模式
1.使用单例模式创建一个SessionFactory
package cn.hrbust.dao;
import org.hibernate.HibernateException;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
//SessionFactory单态模式
public class HibernateUtil {
private static SessionFactory sf =null;
private static Configuration cfg =null;
static {//静态代码块,在类加载时只能执行一次
try {
cfg=new Configuration().configure();
sf=cfg.buildSessionFactory();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory() {
return sf;
}
public static void closeSessionFactory(){
sf.close();
}
}
2.配置hibernate.hbm.xml
<!--保证每个读写线程有唯一的session实例-->
<property name="hibernate.current_session_context_class">thread</property>
3.实现查询功能,使用JUnit测试方法
//查询用户对象
public void testQueryUser() {
Configuration cfg = null;
SessionFactory sf = null;
Session session = null;
Transaction ts = null;
try {
sf=HibernateUtil.getSessionFactory();//sessionfactory单态模式
session=sf.getCurrentSession();//one thread ,one session
ts=session.beginTransaction();
Query query = session.createQuery("from User");
List<User> users = query.list();
for(User u : users) {
System.out.println(u.getName() +" " + u.getAge());
}
/*for(int i=0;i<users.size();i++) {
User u = users.get(i);
System.out.println(u.getName() +" " + u.getAge());
}*/
ts.commit();
} catch (HibernateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
if(ts !=null) {
ts.rollback();
}
}finally {
//session.close();
//sf.close();
}
}