因为每次用增删改查时都需要用到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();
}
} }

运行结果

封装hibernate中session(静态单例模式)的更多相关文章

  1. hibernate中session的获取使用以及其他注意事项

    hibernate中session的获取使用以及其他注意事项 前言:工作时,在同时使用Hibernate的getSession().getHibernateTemplate()获取Session后进行 ...

  2. Hibernate中Session与本地线程绑定

    ------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session ...

  3. Hibernate中Session的get和load

    hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...

  4. hibernate中session

    hibernate中的session是一级缓存,可以理解为进程级的缓存.在进程运行期间一直存在. session可以理解为一个可以操作数据库的对象 具体如何操作数据库? session中有方法, 如果 ...

  5. [转]Hibernate中Session的get和load

    hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别.测试版本:hibernate 4.2.0. get Session接 ...

  6. Hibernate中Session之get和load方法的真正区别

    最近在学习SHH框架中的hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入 ...

  7. Hibernate中Session.get()方法和load()方法的详细比较

    一.get方法和load方法的简易理解  (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用 ...

  8. hibernate中session的线程安全问题

    Hibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在Hibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Sessio ...

  9. Hibernate中Session.get()/load()之区别

    原文链接http://sunxin1001.iteye.com/blog/292090 Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象.其区 ...

随机推荐

  1. python编码总结

    关于ASCII码和Unicode码的来源 计算机只能处理数字,如果要处理文本,需要先将文本转换成数字.早期计算机采用8bit作为一个字节(byte).所以一个字节最大为255(二进制11111111= ...

  2. ES6简单入门

    let let命令用来声明块级作用域. 以前的JavaScript只有全局作用域和函数作用域, 没有块级作用域. // 示例1: if (1) { var a = "hello"; ...

  3. Java泛型二:通配符的使用

    原文地址http://blog.csdn.net/lonelyroamer/article/details/7927212 通配符有三种: 1.无限定通配符   形式<?> 2.上边界限定 ...

  4. 练T25- focus必看!所有成功截图汇总

    http://www.guokr.com/post/565880/ 25914人加入此小组 发新帖 练T25- focus必看!所有成功截图汇总! 读图模式 作家向威 作家 2014-02-22 07 ...

  5. restful API(转自阮一峰)

    RESTful API 设计指南   网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不 ...

  6. Java并发(7):阻塞队列

    在前面我们接触的队列都是非阻塞队列,比如PriorityQueue.LinkedList(LinkedList是双向链表,它实现了Dequeue接口). 使用非阻塞队列的时候有一个很大问题就是:它不会 ...

  7. Python:virtualenv介绍

    virtualenv 在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-packages目录下. 如果我们要同时 ...

  8. mongodb-2.6.0 在win7 64下的安装和服务启动

    转自: http://blog.csdn.net/lingchen214/article/details/24537629 1   自定义安装到C:\mongodb目录下. 2  手动在C:\mong ...

  9. 微信小程序学习笔记(4)--------框架之逻辑层

    逻辑层 逻辑层(App Service):小程序框架的逻辑层是由JavaScript编写的,逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈. App进行程序注册,Page进行页面注册 g ...

  10. PAT 天梯赛 L1-010. 比较大小 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-010 AC代码 #include <iostream> #include <cstdio&g ...