Hibernate的简单封装Session(方便调用)
因为每次用增删改查时都需要用到hibernate的配置来生成session工厂进而生成session,比较麻烦,所以我们直接封装一个可以调用的类,需要的时候只需要调用即可。

新建一个HibernateUtil.java文件
package com.model; import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration; public class HibernateUtil {
private static final SessionFactory factory = builderFactory();//新建一个session工厂,定义为常量直接构建出来
private static final ThreadLocal<Session> threadlock = new ThreadLocal<Session>();//构建一个线程锁,保证安全,实现单线程不被占用
private static SessionFactory builderFactory() {
Configuration config = new Configuration().configure();//读取hibernate配置
return config.buildSessionFactory();
} public static Session getSession(){
//获取线程锁中的session
Session session=threadlock.get();
if(session==null){
//如果为空,则表明会话没有,则可以新建会话
session=factory.openSession();
//把会话放到线程锁中
threadlock.set(session);
}
return session;
}
public static void closeSession(){
Session session=threadlock.get();
if(session!=null){
//不为空,则表明会话中有内容需要关闭
session.close();
//再将线程锁中的内容清空
threadlock.set(null);
}
}
}
测试一下:
package com.model;
import org.hibernate.Session;
public class TestFruit {
    public static void main(String[] args){
        Fruit f = new Fruit();
        f.setIds("q001");
        f.setName("草莓");
        f.setPrice(20.0);
        f.setSource("张店");
        f.setNumbers(200);
        f.setImage("hahh");
        Session session = null;
        try{
            session=HibernateUtil.getSession();
            session.beginTransaction();
            session.save(f);
            session.getTransaction().commit();
        }catch(Exception ex){
            ex.printStackTrace();
            session.getTransaction().rollback();
        }finally{
            HibernateUtil.closeSession();
        }
    }
}
效果如下:

HibernateUtil.java文件是已经封装好的,可以直接将内容复制过来正常使用,方便快捷。
Hibernate的简单封装Session(方便调用)的更多相关文章
- Hibernate框架简单应用
		
Hibernate框架简单应用 Hibernate的核心组件在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层.它通过配置文件(hibernate.proper ...
 - ssh架构之hibernate(一)简单使用hibernate完成CRUD
		
1.Hibernate简介 Hibernate是一个开放源代码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,h ...
 - MongoDB Python官方驱动 PyMongo 的简单封装
		
最近,需要使用 Python 对 MongodB 做一些简单的操作,不想使用各种繁重的框架.出于可重用性的考虑,想对 MongoDB Python 官方驱动 PyMongo 做下简单封装,百度一如既往 ...
 - Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
		
前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到 ...
 - FMDB简单封装和使用
		
工具:火狐浏览器+SQLite Manager插件 ; Xcode; FMDB库; 效果: 项目地址: https://github.com/sven713/PackFMDB 主要参考这两篇博客: 1 ...
 - [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定
		
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
 - Android--Retrofit+RxJava的简单封装(三)
		
1,继续接着上一篇的讲讲,话说如果像上一篇这样的话,那么我们每一次请求一个结构都要创建一堆的Retrofit对象,而且代码都是相同的,我们可以试试封装一下 先创建一个HttpMethods类,将Ret ...
 - 对pymysql的简单封装
		
#coding=utf-8 #!/usr/bin/python import pymysql class MYSQL: """ 对pymysql的简单封装 "& ...
 - iOS开发——UI篇OC篇&UITableView简单封装
		
UITableView简单封装 UITableView时iOS开发中使用最多也是最重的一个UI空间,其实在App Store里面的%80以上的应用都用到了这个控件,所以就给大家介绍一下,前面的文章中也 ...
 
随机推荐
- 洛谷 P2691 逃离
			
题目描述 一个n×n栅格是由n行和n列顶点组成的一个无向图,如图所示.用(i,j)表示处于第i行第j列的顶点.除了边界顶点(即满足i=1,i=n,j=1或j=n的顶点(i,j)),栅格中的所有其他顶点 ...
 - Ubuntu系统Apache 2部署SSL证书
			
几天前用Apache 2部署了一个静态网页,但通过域名访问时Google提示“不安全”,经了解,原来是缺少证书. 什么是SSL证书? SSL 是指安全套接字层,简而言之,它是一项标准技术,可确保互联网 ...
 - 使用HelpProvide组件调用帮助文件
			
实现效果: 知识运用: HelpProvider组件的HelpNameSpace属性 //于对象关联的帮助文件名 public virtual string HelpNameSpace {get; s ...
 - Happy Equation
			
Source: The 10th Shandong Provincial Collegiate Programming Contest 题解: 因为2^p为偶数,所以a,x的奇偶性相同 1.当a为奇数 ...
 - Python封装补充
			
property属性 property实际是setter getter deleter是集合体,并不是一个单独的方法 import math # 使用的库 class Circle: def __in ...
 - web.xml 中 resource-ref 的注意事项
			
配置说明: web.xml 中配置 <resource-ref> <description>Employees Database for HR Applications< ...
 - 类库日期和jsp导包
			
一.日期类库 1.1. Date Date类创建一个时间,或者是创建一个与你计算机当前的时间:精确到毫秒. //实例化时间类 Date date = new Date(); 1.2.格式转换类 1.2 ...
 - Windows平台下MySQL常用操作与命令
			
Windows平台下MySQL常用操作与命令 Windows平台下MySQL常用操作与命令,学习mysql的朋友可以参考下. 1.导出整个数据库 mysqldump -u 用户名 -p --defau ...
 - oracle 快速复制一张表,并在此创建索引,日志及并行度
			
复制表结构及其数据 create table table_name_new as select * from table_name_old 只复制表结构 create table table_name ...
 - 03_6_package和import语句
			
03_6_package和import语句 1. package和import语句 为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重命名空 ...