zoukankan      html  css  js  c++  java
  • 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(); } } }

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

  • 相关阅读:
    作为一名程序员应该具备哪些素质
    从100万个整数里找出100个最大的数
    数据库 SQL语句优化
    服务器上文件打包下载
    ThreadPoolExcutor
    几种序列化与get、set方法的关系
    idea没有错误出现红色波浪线怎么去掉?
    两个对象的属性赋值
    RandomStringUtils的使用
    IDEA中类似eclipse的workSpace的实现
  • 原文地址:https://www.cnblogs.com/liyh123/p/6520264.html
Copyright © 2011-2022 走看看