因为每次用增删改查时都需要用到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. 访问hdfs里的文件

    准备工作: 给hdfs里上传一份用于测试的文件 [root@master ~]# cat hello.txt hello 1 hello 2 hello 3 hello 4 [root@master ...

  2. ps 和 grep 查找消除 grep自身查找(转载)

    用ps -def | grep查找进程很方便,最后一行总是会grep自己. $ ps -def | grep dragonfly-framework dean 5273 5272 0 15:23 pt ...

  3. python学习之路-第三天-函数

    函数 函数的定义关键字:def 使用global语句可以清楚地表明变量是在外面的块定义的 示例:(函数运行完毕后x的值是2) #!/usr/bin/python # Filename: func_gl ...

  4. 判断元素的16中方法expected_conditions

    from selenium.webdriver.support import expected_conditons as EC 1.title_is:判断当前页面的title是否完全等于预期字符串,返 ...

  5. 移动app自动化测试

    原文出处https://www.toutiao.com/i6473606106970063374/ 原文作者是今日头条的:一个字头的诞生 在此感谢原文作者的无私分享! 移动App自动化测试(一) 目前 ...

  6. 虚拟环境virtualenv和virtualenvwrapper(转)

    virtualenv是用来创建一个独立的Python虚拟环境的工具,通过virtualenv可以创建一个拥有独立的python版本和安装库的虚拟开发环境.这样一来我们就可以在虚拟环境中安装各种各种所需 ...

  7. 本地连不上远程mysql数据库(1)

    Ubuntu 16.04下开启Mysql 3306端口远程访问   0. 前言 网上看到很多开启Mysql远程访问端口,修改的配置文件我都没有找到. 特意查看了我的Linux版本 $ sudo lsb ...

  8. JavaScript:判断当前浏览器是否为微信浏览器

    <script type="text/javascript"> function CheckWeChatBrowser() { var ua = navigator.u ...

  9. web.xml配置之<context-param>详解

    读完本文,你将了解(1)<context-param>的作用和用法,(2)<context-param>配置和<init-param>的区别 <context ...

  10. 什么是JIT?

    JIT是just in time,即时编译技术.使用该技术,能够加速java程序的执行速度.下面,就对该技术做个简单的讲解. 首先,我们大家都知道,通常javac将程序源代码编译,转换成java字节码 ...