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工具类的更多相关文章

  1. Hibernate.基础篇《一》.Hibernate工具类.

    Hibernate.基础篇<一>.Hibernate工具类. 话述: Hibernate.基础篇第一篇,前面是代码.后面再加理论&实践. Hibernate使用的版本是:5.x,在 ...

  2. hibernate工具类HibernateUtil详解

    1.为什么要用hibernateUtil这个类,先看这段代码:     //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他      Con ...

  3. Hibernate工具类_抽取重复核心代码

    问题:在Hibernate中每次执行一次操作总是需要加载核心配置文件,获取连接池等等都是重复动作,所以抽取出来 解决: package com.xxx.utils; /** *Hibernate的工具 ...

  4. Hibernate 工具类

    1.HibernateConfigUtil.java(HIbernate配置工具类) import org.hibernate.Session; import org.hibernate.Sessio ...

  5. 一个简单的Hibernate工具类HibernateUtil

    HibernateUtil package com.wj.app.util; import org.hibernate.Session; import org.hibernate.SessionFac ...

  6. hibernate 配置文件 和一个 id生成类BaseEntity.java 和一个hibernate工具类 HibernatUtils.java

    package com; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate ...

  7. javaweb常用工具类及配置文件备份

    Javaweb常用工具类及配置文件备份   做一个代码备份,以后常用到的. hibernate工具类备份 package com.dly.service; /*  * hibernate获取sessi ...

  8. Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加

    package com.aherp.framework.util; import java.lang.reflect.Array;import java.lang.reflect.Method;imp ...

  9. 【SSH三大框架】Hibernate基础第二篇:编写HibernateUtil工具类优化性能

    相对于上一篇中的代码编写HibernateUtil类以提高程序的执行速度 首先,仍然要写一个javabean(User.java): package cn.itcast.hibernate.domai ...

随机推荐

  1. Linux node.js安装

    1.下载地址 下载node 英文网址:https://nodejs.org/en/download/ 中文网址:http://nodejs.cn/download/ 2.下载下来的tar文件上传到服务 ...

  2. 安装Nexus时报Error occurred shutting down framework: java.lang.NumberFormatException: null

    Error occurred shutting down framework: java.lang.NumberFormatException: null 原因 :路径中有中文

  3. python 字符串替换功能 string.replace()可以用正则表达式,更优雅

    说起来不怕人笑话,我今天才发现,python 中的字符串替换操作,也就是 string.replace() 是可以用正则表达式的. 之前,我的代码写法如下,粗笨: 自从发现了正则表达式也生效后,代码变 ...

  4. Java自学-控制流程 switch

    Java的 switch 语句 switch 语句相当于 if else 的另一种表达方式 示例 1 : switch switch可以使用byte,short,int,char,String,enu ...

  5. 30个关于Shell脚本的经典案例(上)

    对于初学者而言,因为没有实战经验,写不出来Shell脚本很正常,如果工作了几年的运维老年还是写不出来,那就是没主动找需求,缺乏练习,缺乏经验.针对以上问题,总结了30个生产环境中经典的Shell脚本, ...

  6. IDEA 导入Module,多个Module在同一个Project 下显示

    之前导入过,隔断时间就忘记了,干脆记下来,免得后续找的麻烦 此文章转载自: https://blog.csdn.net/yyym520/article/details/77527976 1.打开IDE ...

  7. npm 安装、卸载 模块或包的命令(转载)

    npm安装卸载命令 来源:https://www.jianshu.com/p/e6ee00ea03cd npm安装模块 [npm install xxx]利用 npm 安装xxx模块到当前命令行所在目 ...

  8. Windows Cmd 命令管理服务

    今天在Windows 干净环境上安装软件过程中,安装完成后,发现部署在IIS 上的网站无法使用,提示  "您提交的参数有误!,请重新提交" 纯净的windows 7 x64位环境, ...

  9. 优化nginx数据包头缓存

    例子:414错误,网址太长. 长网址访问例子: 以下脚本会生成一个长网址并访问,导致414长网址报错. [root@proxy ~]#vim nginx_test.sh #!/bin/bash URL ...

  10. 删除线性表中所有值为x的元素

    时间复杂度O(n),空间复杂度O(1). 简单的问题两种不同的思路. 代码: #include <stdio.h> #define MAX 100 struct sqlist{ int d ...