zoukankan      html  css  js  c++  java
  • 封装hibernate中session(静态单例模式)

    因为每次用增删改查时都需要用到session,直接做一个类,需要的时候只需要调用即可
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    public class HibernateUtil {
        //定义常量是为了实现单例,不让随便new
        //ThreadLocal<Session>不是集合,是线程锁,为了单线程安全
        private static final ThreadLocal<Session> lock = new ThreadLocal<Session>();
        
        private static final SessionFactory factory = buildFactory();
        private static SessionFactory buildFactory() {
            Configuration cfg = new Configuration().configure();//读取 hibernate.cfg.xml 的配置信息
            return cfg.buildSessionFactory();
        }
        
        public static Session getSession() {
            //先获取线程锁中的session
            Session session = lock.get();
            
            if (session == null) {//如果没有session就新建一个session赋值给lock
                session = factory.openSession();
                lock.set(session);
            }
            
            return session;
        }
        public static void closeSession() {   
            Session session = lock.get();//先获取线程锁中的session
            
            if (session != null) {//如果session有值,那么关闭session
                session.close();
                lock.set(null);    //将session关闭之后再给lock赋值null,方便其他线程使用    
            }
        }
        
    }

    调用这个类的方法

    package com.itnba.maya.test;
    
    import java.util.List;
    
    import org.hibernate.*;
    
    import com.itnba.maya.model.Fruit;
    import com.itnba.maya.model.HibernateUtil;
    
    public class BB {
    
        public static void main(String[] args) {
            Fruit data = new Fruit();
            data.setIds("s003");
            data.setName("芒果");
            data.setSource("不知道");
            data.setPrice(12.0);
            data.setNumbers(100);
            data.setImage("没有");
            
            Session session=null;
            try{
                session=HibernateUtil.getSession();
                session.beginTransaction();
                session.save(data);
                session.getTransaction().commit();
            }catch (Exception e) {
                session.getTransaction().rollback();
            }finally {
                HibernateUtil.closeSession();
            }    
        }
    
    }

    运行结果

  • 相关阅读:
    sql server 的语句形式
    restful规范
    sql server 相对应的增删改查以及表的创建及修改
    简单介绍函数sorted
    简单介绍sql server
    Python中三种格式化输出的方式
    基于socket 数据传输的粘包问题
    Python socket 套接字实现通信
    Dapr-状态管理
    Dapr-服务调用
  • 原文地址:https://www.cnblogs.com/hq233/p/6498157.html
Copyright © 2011-2022 走看看