1. Configuration
(1) Configuration 类负责管理 Hibernate 的配置信息 , 包括如下内容:
1) Hibernate 运行的底层信息:数据库的 URL、用户名、密码、JDBC 驱动类,数据库 Dialect,数据库连接池等(对应 hibernate.cfg.xml 文件)
2) 持久化类与数据表的映射关系(*.hbm.xml 文件)
3) 该类的全名: org.hibernate.cfg.Configuration
(2)创建 Configuration 的两种方式
//1,属性文件properties
Configuration config=new Configuration();
//2,xml文件
//解析配置文件
//2.1,默认解析hibernate.cfg.xml文件
Configuration conf = new Configuration().configure();
//2.2,指定解析文件
Configuration conf=new Configuration().configure("hibernate.cfg.xml");
2. SessionFactory
Configuration 对 象 根 据 当 前 的 配 置 信 息 生 成 SessionFactory 对 象 。
SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保存了当前的数据库配置信息和所有映射关系以及预定义的 SQL 语句。同时,SessionFactory 还负责维护 Hibernate 的二级缓存) 。
Configuration conf=new Configuration().configure("hibernate.cfg.xml");
//根据解析对象获取sessionFactory
SessionFactory sessionFactory=conf.buildSessionFactory();
/**
*
说明:
1) SessionFactory 是线程安全的。
2) 构造 SessionFactory 很消耗资源,一般情况下一个应用中只初始化 一个SessionFactory 对象。
3) SessionFactory 是生成 Session 的工厂:
Session session = sessionFactory.openSession();
*/
3. Session3.1. Session 概述
Session 是应用程序与数据库之间交互操作的一个单线程对象,是 Hibernate 运作的中心,所有持久化对象必须在 session 的管理下才可以进行持久化操作。此对象的生命周期很短。Session 中有一个缓存,显式执行 flush()方法之前,所有的持久层操作的数据都缓存在 session 对象处。 (相当于 JDBC 中的 Connection) 。一般一个业务操作使用一个 Session。
Session 是线程不安全的,一般是一次业务操作使用一个 Session
3.2. Session 常用方法
package com.test;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import com.bean.User;
import com.util.HibernateUtil;
public class SessionApi {
private static SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
public static void save(){
//1,获取session对象
Session session = sessionFactory.openSession();
//2,开启事务
session.beginTransaction();
User user = new User();
user.setUid("5");
user.setName("xiaoming");
user.setAge(20);
//3,调用save方法
session.save(user);
//4,提交事务
session.getTransaction().commit();
//5,关闭资源
session.close();
}
public static void update(){
Session session = sessionFactory.openSession();
session.beginTransaction();
User user = new User();
user.setUid("5");
user.setName("xiaohong");
session.update(user);
session.getTransaction().commit();
session.close();
}
//存在就更新,不存在插入
public static void saveOrUpdate(){
Session session = sessionFactory.openSession();
session.beginTransaction();
User user = new User();
// user.setUid(4);
// Hibernate: select user_.Uid, user_.Name as Name0_, user_.Age as Age0_ from user user_ where user_.Uid=?
// Hibernate: update user set Name=?, Age=? where Uid=?
user.setUid("6");
// Hibernate: select user_.Uid, user_.Name as Name0_, user_.Age as Age0_ from user user_ where user_.Uid=?
// Hibernate: insert into user (Name, Age, Uid) values (?, ?, ?)
user.setName("dada");
user.setAge(11);
session.saveOrUpdate(user);
session.getTransaction().commit();
session.close();
}
public static void query(){
//1,获取session对象
Session session = sessionFactory.openSession();
//2,调用load,get方法
//bean.class,主键id的值 String类型 bean类id也要String
//Object obj = session.load(User.class, "1");
Object obj = session.get(User.class, "1");
System.out.println("------使用obj的分割线-------");
System.out.println(obj);
//load方法使用时才加载 延迟加载
//------使用obj的分割线-------
//Hibernate: select user0_.Uid as Uid0_0_, user0_.Name as Name0_0_, user0_.Age as Age0_0_ from user user0_ where user0_.Uid=?
//User [uid=1, name=dongdong, age=20]
//get方法 即时加载
//Hibernate: select user0_.Uid as Uid0_0_, user0_.Name as Name0_0_, user0_.Age as Age0_0_ from user user0_ where user0_.Uid=?
//------使用obj的分割线-------
//User [uid=1, name=dongdong, age=20]
session.close();
}
public static void delete(){
Session session = sessionFactory.openSession();
session.beginTransaction();
User user = new User();
user.setUid("3");
session.delete(user);
session.getTransaction().commit();
session.close();
}
public static void main(String[] args) {
//save();
//update();
//saveOrUpdate();
//query();
delete();
}
}
4. Transaction
Transaction 接口是 Hibernate 的数据库事务接口,代表一次原子操作,它具有数据库事务(mysql事务概念)的概念,它对底层的事务接口做了封装,底层事务接口包括:
1) JDBC API
2) JTA(Java Transaction API)
3) CORBA(Common Object Request Broker Architecture) API
public static void update() {
/*
获得事务对象: Transaction tx = session.beginTransaction();
常用方法:
1) commit():提交相关联的 session实例
2) rollback():撤销事务操作
3) wasCommitted():检查事务是否提交
*/
User user = new User();
user.setUid("5");
user.setName("xiaohong");
Session session = sessionFactory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.update(user);
tx.commit();
} catch (HibernateException ex) {
ex.printStackTrace();
tx.rollback();
} finally {
if (session != null) {
session.close();
}
}
}