Hibernate中封装session(静态单例模式)

先做一个类,把session封装起来,等用的时候可以直接调用。

public class HibernateUtil {
    //线程锁,保证线程安全,在用的时候只有这一个session,别人无法处理
    private static final ThreadLocal<Session> threadLock = new ThreadLocal<Session>();
    //定义常量是为了实现单例,不允许更改赋值
    private static final SessionFactory factory = buildFactory();
    //写一个buildFactory方法
    private static SessionFactory buildFactory() {
        //读取hibernate.cfg.xml配置,加载数据库和实体类
        Configuration cfg = new Configuration().configure();
        return  cfg.buildSessionFactory();
    }
  //获取session
public static Session getSession(){ //获取上面thredlock中的session Session session = threadLock.get(); //如果thredlock中是空的就新建一个session if(session ==null){ session = factory.openSession(); //将新建的session放入thredlock中 threadLock.set(session); } return session; } //close的方法 public static void closeSession(){ //先获取thredlock中的session Session session = threadLock.get(); //如果不是空,就把session关闭,并且把thredlocal清空 if(session !=null){ session.close(); threadLock.set(null); } } }

 然后就可以使用这个封装的session

    @Test
    public void testSelect(){
        Session session = null;
        try{
            //有了之前封装的方法  我们就可以直接用.getsession得到一个session
            session = HibernateUtil.getSession();
            //差kc表中所有的
            List<Kc> list = session.createQuery("from Kc").getResultList();
            for(Kc c : list){
         System.out.println(c.getWzName()
+" "+c.getPrice()+" "+c.getUnit()); } } catch(Exception e){ e.printStackTrace(); } finally{ HibernateUtil.Closesession(); } } }

这里查完所有的后,打印了物资名称,单价,和单位

原文地址:https://www.cnblogs.com/liyh123/p/6520264.html