hibernate工具类
1、hibernate的API
(1)程序源码:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import pers.zhb.domain.Student;
class HinernateTest{
public static void testAdd() {
//(1)加载hibernate核心配置文件
//src目录下的配置文件名称是固定的:hibernate.cfg.xml
Configuration configuration= new Configuration();
configuration.configure();
//(2)读取hibernate核心配置文件的内容,创建sessionFactory对象,根据映射关系创建相应的表
SessionFactory sessionFactory=configuration.buildSessionFactory();
//(3)利用sessionFactory对象创建session对象
//类似于创建连接
Session session=sessionFactory.openSession();
//(4)开启事务
Transaction transaction=session.beginTransaction();
//(5)具体操作
Student student=new Student();
student.setSname("zzzz");
student.setSex("男");
student.setBirthday("2019-11-11");
student.setClassno("201911");
student.setPoint(111);
student.setPhone("1873496511");
student.setEmail("20171514@qq.com");
session.save(student);
//(6)提交事务
transaction.commit();
//(7)关闭资源
session.close();
sessionFactory.close();
}
public static void main(String []args){
HinernateTest hinernateTest=new HinernateTest();
hinernateTest.testAdd();
}
}
(2)configuration对象:
Configuration configuration= new Configuration();
configuration.configure();
创建时调用空参构造方法,加载src目录下的hibernate.cfg.xml文件。
(3)sessionFactory对象(用于创建操作数据库的session对象的工厂):
SessionFactory sessionFactory=configuration.buildSessionFactory();
根据配置信息,创建sessionFactory对象。
特点:
负责保存和使用所有配置信息,消耗的内存资源比较大。
线程安全。
根据sessionFactory对象的特点,应该尽量只创建一个sessionFactory对象。
(4)session对象:
Session session=sessionFactory.openSession();
类似于JDBC中的创建连接。
(5)transaction对象:
Transaction transaction=session.beginTransaction();
开启事务并获得操作事务的transaction对象。
(6)提交事务:
transaction.commit();
(7)回滚事务:
transaction.rollback();
(8)释放资源:
session.close();
sessionFactory.close();
2、工具类
因为hibernate的代码大部分都是固定的,为了将减少重复的代码的书写,可以将这些代码封装为一个工具类,获取hibernate的session对象。
(1)创建hibernate的工具类:
package pers.zhb.HibernateUtils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtils {
public static SessionFactory sessionFactory;
static {//只执行一次,确保sessionFactory只创建一次,加载类的时候为静态变量分配一次内存
Configuration configuration = new Configuration().configure();
sessionFactory = configuration.buildSessionFactory();
}
public static Session openSession(){//获得session
Session session=sessionFactory.openSession();
return session;
}
public static Session getCurrentSession(){//获得与线程绑定的Session
Session session=sessionFactory.getCurrentSession();
return session;
}
}
(2)测试类(查询学号为937221509的学生信息):
import org.hibernate.Session;
import org.hibernate.Transaction;
import pers.zhb.domain.Student;
import pers.zhb.HibernateUtils.HibernateUtils;
public class HiberateSel {
public static void testSel() {
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
Student student=session.get(Student.class,);
System.out.println(student);
transaction.commit();
session.close();
}
public static void main(String []args){
HiberateSel hinernateSel=new HiberateSel();
hinernateSel.testSel();
}
}
3、openSession()与getCurrentSession()
(1)getCurrentSession()创建的Session会和当前线程绑定,OpenSession()则不会。
(2)getCurrentSession()创建的Session在commit或rollback后会自动关闭,openSession()必须手动关闭。
(3)使用getCurrentSession()需要在Hibernate.cfg.xml配置文件中进行配置:
一个数据库资源:
<propety name=”Hibernate.current_session_context_class”>thread</propety>
全局事物、jta事物、多个数据库资源或事物资源:
<propety name=”Hibernate.current_session_context_class”>jta</propety>
代码如下:
HibernateUtils.getCurrentSession().beginTransaction();
... ...
HibernateUtils.getCurrentSession().getTransaction().commit();
当使用openSession()的时候不需要如上的配置,代码如下:
Session session = HibernateUtils.openSession();
Transaction transaction= session.beginTransaction();
transaction.commit();
hibernate工具类的更多相关文章
- Hibernate.基础篇《一》.Hibernate工具类.
Hibernate.基础篇<一>.Hibernate工具类. 话述: Hibernate.基础篇第一篇,前面是代码.后面再加理论&实践. Hibernate使用的版本是:5.x,在 ...
- hibernate工具类HibernateUtil详解
1.为什么要用hibernateUtil这个类,先看这段代码: //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他 Con ...
- Hibernate工具类_抽取重复核心代码
问题:在Hibernate中每次执行一次操作总是需要加载核心配置文件,获取连接池等等都是重复动作,所以抽取出来 解决: package com.xxx.utils; /** *Hibernate的工具 ...
- Hibernate 工具类
1.HibernateConfigUtil.java(HIbernate配置工具类) import org.hibernate.Session; import org.hibernate.Sessio ...
- 一个简单的Hibernate工具类HibernateUtil
HibernateUtil package com.wj.app.util; import org.hibernate.Session; import org.hibernate.SessionFac ...
- hibernate 配置文件 和一个 id生成类BaseEntity.java 和一个hibernate工具类 HibernatUtils.java
package com; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate ...
- javaweb常用工具类及配置文件备份
Javaweb常用工具类及配置文件备份 做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /* * hibernate获取sessi ...
- Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加
package com.aherp.framework.util; import java.lang.reflect.Array;import java.lang.reflect.Method;imp ...
- 【SSH三大框架】Hibernate基础第二篇:编写HibernateUtil工具类优化性能
相对于上一篇中的代码编写HibernateUtil类以提高程序的执行速度 首先,仍然要写一个javabean(User.java): package cn.itcast.hibernate.domai ...
随机推荐
- PLC采集与控制,实现MES工序管理与品质管控,记录产品的加工数据,工厂生产装配流水线的一次成功应用
1.通过程序与PLC的采集与控制,实现MES工序管理,品质管控,历史数据追溯的目的 2.大概的流程图 3.有三个地方相关联来实现以上功能,首先是MES的工序管理,设置指定的产品有那些工序,上位机程序扫 ...
- 2019 巨人网络java面试笔试题 (含面试题解析)
本人3年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.巨人网络等公司offer,岗位是Java后端开发,最终选择去了巨人网络. 面试了很多家公司,感觉大部分公司考察的点 ...
- spring 中的 bean 是线程安全的吗?
spring 中的 bean 是线程安全的吗? Spring 不保证 bean 的线程安全. 默认 spring 容器中的 bean 是单例的.当单例中存在竞态条件,即有线程安全问题.如下面的例子 计 ...
- MySQL DDL--gh-ost学习
gh-ost工作原理 1.首先新建一张ghost表,结构与源表相同 2.使用alter命令修改ghost表 3.1.模拟从库命令获取主库上该表的binlog(基于全镜像的行模式的binlog包含更改前 ...
- ubuntu 下 VNC Viewer 通过网线连接树莓派的网络设置
1 本机环境 Ubuntu 19.10 Raspberry 3B+ (Raspbian.开启了 vnc 服务) 2 Ubuntu 网络设置 1. Identity 下选择 Mac Address(如: ...
- linux下nm命令的使用
linux下强大的文件分析工具 -- nm 什么是nm nm命令是linux下自带的特定文件分析工具,一般用来检查分析二进制文件.库文件.可执行文件中的符号表,返回二进制文件中各段的信息. 目标文件. ...
- sklearn.feature_extraction.text 的TfidfVectorizer函数
TfidfVectorizer函数主要用于,将文档(句子)等通过 tf-idf值来进行表示,也就是用一个tf-idf值的矩阵来表示文档(句子也可). from sklearn.feature_extr ...
- svn: E155004: Working copy '/data/www' locked.
svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details) svn: E155004: Working c ...
- ArcGIS pro 发布地图服务(一)动态地图服务
1.软件:arcgis pro 2.4 数据:.mxd文档. 2.导入mxd文档. 3.登录portal账号 4.分析—发布 5.在server中的地图服务 JavaScript api 查看 6. ...
- 小白式Git使用教程,从0到1
Git是什么? Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程: Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remo ...