Hibernate的核心API
-
Configuration:Hibernate的配置对象
-
SessionFactory:Session工厂
SessionFactory内部维护了Hibernate的连接池和Hibernate的二级缓存。是线程安全的对象。一个项目创建一个对象即可。
Session:类似Connection对象是连接对象 -
Session代表的是Hibernate与数据库的链接对象。不是线程安全的。(需定义为局部的变量)与数据库交互桥梁。
Session中的API
- 保存方法:
Serializable save(Object obj);–返回id - 查询方法:
T get(Class c,Serializable id);
T load(Class c,Serializable id);
get方法和load方法的区别?
get方法–>采用的是立即加载,执行到这行代码的时候,就会马上发送SQL语句去查询。查询后返回是真实对象本身。
查询一个找不到的对象的时候,返回null
load方法–>采用的是延迟加载(lazy懒加载),执行到这行代码的时候,不会发送SQL语句,当真正使用这个对象的时候(除了id以外的属性)才会发送SQL语句。 查询后返回的是代理对象。javassist-3.18.1-GA.jar 利用javassist技术产生的代理。
查询一个找不到的对象的时候,返回ObjectNotFoundException
-
修改方法
void update(Object obj);
直接创建对象修改(不推荐)
先查询再修改(推荐) -
删除方法
void delete(Object obj);
直接创建对象,删除
或先查询再删除(推荐–可以进行级联删除) -
保存或更新(不常用)
void saveOrUpdate(Object obj) -
查询所有
createQuery()
createSQLQuery()
//接受HQL
//,Hibernate
// 接收HQL:Hibernate Query Language 面向对象的查询语言
Query query = session.createQuery("from Customer");
List<Customer> list = query.list();
for (Customer customer : list) {
System.out.println(customer);
}
// 接收SQL:
SQLQuery query = session.createSQLQuery("select * from cst_customer");
//Object数组
List<Object[]> list = query.list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
- Transaction:事务对象
Hibernate中管理事务的对象。
Transaction transaction = session.beginTransaction();
commit();
rollback();
使用基本步骤
1.加载核心配置文件
2.创建SessionFactory对象:类似JDBC中连接池
3.通过SessionFactory获取到session对象,
4.手动开启事务
5.编写代码
6.事务提交
7.资源释放
//1.加载核心配置文件,Configuration
Configuration configuration = new Configuration().configure();
//2.创建SessionFactory对象,session工厂
SessionFactory sessionFactory = configuration.buildSessionFactory();
//3.通过SessionFactory获取到session对象
Session session = sessionFactory.openSession();
//4.手动开启事务
Transaction transaction = session.beginTransaction();
//5.编写代码
Customer customer = new Customer();
customer.setCust_name("zs");
session.save(customer);
//6.事务提交
transaction.commit();
//7.资源释放
session.close();
抽取工具类HibernateUtil
package com.by.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
public static final Configuration cfg;
public static final SessionFactory sf;
static{
cfg = new Configuration().configure();
sf = cfg.buildSessionFactory();
}
public static Session openSession(){
return sf.openSession();
}
}