zoukankan      html  css  js  c++  java
  • 封装hibernate 初始化类 方便调用 (静态单例模式)

    因为每次用增删改查时都需要用到session,所以我们直接封装一个类,需要的时候只需要调用即可

    package com.itnba.maya.bean;
    
    import org.hibernate.*;
    import org.hibernate.cfg.*;
    import javafx.util.*;
    
    public class HibernateUtil {
    	//定义常量是为了实现单例,不让随便new
    	private static final SessionFactory factory = BuilderFactory();
    	//ThreadLocal<Session>不是集合,是线程锁,为了单线程安全
    	private static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
    	private static SessionFactory BuilderFactory() {
    		Configuration conf = new Configuration().configure();
    		return conf.buildSessionFactory();
    	}
    	public static Session getSession(){
    		//先获取线程锁中的session
    		Session session = threadlocal.get();
    		if(session == null){
    			//如果没有session就新建一个session赋值给threadlocal
    			session = factory.openSession();
    			threadlocal.set(session);
    		}
    		return session;
    	}
    	public static void closeSession(){
    		//先获取线程锁中的session
    		Session session = threadlocal.get();
    		if(session != null){
    			//将session关闭之后再给threadlocal赋个null,方便其他线程使用
    			session.close();
    			threadlocal.set(null);
    		}
    	}
    	
    	
    }
    

      我们引用看一下能不能使用

    package com.itnba.maya.bean;
    
    import org.hibernate.*;
    
    public class TestFruit {
    
    	public static void main(String[] args) {
    		Fruit f = new Fruit();
    		f.setIds("i001");
    		f.setName("西瓜");
    		f.setPrice(10.0);
    		f.setSource("张店");
    		f.setNumbers(100);
    		f.setImage("无");
    		try{
    			Session session = HibernateUtil.getSession();
    			session.beginTransaction();
    			session.save(f);
    			session.getTransaction().commit();
    		}
    		catch(Exception e){
    			e.printStackTrace();
    		}
    		finally {
    			HibernateUtil.closeSession();
    		}
    	}
    
    }
    

      运行一下看下结果:

    看下数据库中是否改变

    这样我们就成功的将hibernate 初始化类封装好了,可以在需要时直接引用即可

  • 相关阅读:
    解决安装Visual Studio 2012后SQL Server 2008 远程过程调用失败的问题
    解决 Visual Studio 2012 有时不能调试的问题
    WPF实现窗体最小化后小图标在右边任务栏下
    WinForm实现窗体最小化后小图标在右边任务栏下
    C# 开机启动代码
    C# ?? 操作符示例
    WPS页面设置
    PCA(主成分分析)和LDA详解
    MySQL命令行导入sql文件时出现乱码解决方案
    IKAnalyzer 独立使用 配置扩展词典
  • 原文地址:https://www.cnblogs.com/dnf1612/p/6497596.html
Copyright © 2011-2022 走看看