1.Configuration对象
加载默认的hibernate.cfg.xml核心配置文件
加载指定路径下的核心配置文件
加载映射文件
2.SessionFactory
SessionFactory不是轻量级的,其内部维护了Hibernate的连接池和二级缓存(redis已经可以替代,所以现在基本已经不使用),是线程安全的,一个项目只需一个SessionFactory对象
抽取SessionFactory工具类
HibernateUtils.java
package com.wuhaitao.hibernate.utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
/**
* @author wuhaitao
*SessionFactory工具类
*/
public class HibernateUtils {
//SessionFactory对象只需一个
public static Configuration configuration;
public static SessionFactory factory;
//静态代码块赋值
static {
configuration = new Configuration().configure();
factory = configuration.buildSessionFactory();
}
//得到Session对象
public static Session openSession() {
return factory.openSession();
}
}
3.Session对象
1.Session接口负责执行持久化对象的CRUD操作,但其并不是线程安全的,所以必须定义到方法内部中,否则会引发安全问题。代表的是Hibernate与数据库的连接对象
2.save()方法:将记录进行保存,返回一个Serializable的id
3.查询方法:get(),load()
HibernateDemo2.java
package com.wuhaitao.hibernate.utils;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.wuhaitao.hibernate.demo1.Customer;
public class Hibernatedemo2 {
@Test
public void demo3() {
//得到Session对象
Session session = HibernateUtils.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
/*//处理内容,get方法查询
Customer customer = session.get(Customer.class, 1L);
System.out.println(customer);*/
//处理内容,load方法查询
Customer customer = session.get(Customer.class, 1L);
System.out.println(customer);
//提交事务
transaction.commit();
//释放资源
session.close();
}
}
区别:
get方法是立即加载,执行到SQl代码块时,就会马上发送SSQL语句去查询.查询后返回的是真实对象本身。当查询对象不存在时,返回对象为空
load方法是延迟加载(lazy懒加载),执行到SQl代码块时,不会发送Sql语句,当真正使用这个对象时才会去发送SQL语句。查询后返回的是代理对象,利用javassist技术产生的代理。当查询对象不存在时,会抛出ObjectNotFoundException异常。
4.修改方法
直接创建对象,进行修改(不推荐,但可以)
先查询再修改(推荐)
HibernateDemo2.java
package com.wuhaitao.hibernate.utils;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.wuhaitao.hibernate.demo1.Customer;
public class Hibernatedemo2 {
@Test
public void demo4() {
//得到Session对象
Session session = HibernateUtils.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//处理内容 直接修改
Customer customer = new Customer();
customer.setCust_name("大白");
customer.setCust_id(1L);
session.update(customer);
//提交事务
transaction.commit();
//释放资源
session.close();
}
@Test
public void demo5() {
//得到Session对象
Session session = HibernateUtils.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//处理内容 直接修改
Customer customer = session.get(Customer.class, 1L);
customer.setCust_name("小白");
session.update(customer);
//提交事务
transaction.commit();
//释放资源
session.close();
}
}
5.删除
直接删除对象
先查询再删除(推荐)
和修改同理
区别:后者在涉及到级联删除的时候,会将对象级联的数据会一并删除掉。
5.保存或更新saveOrUpdate()
6.查询全部Query
HibernateDemo2.java
package com.wuhaitao.hibernate.utils;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.wuhaitao.hibernate.demo1.Customer;
public class Hibernatedemo2 {
@Test
public void demo6() {
//得到Session对象
Session session = HibernateUtils.openSession();
//开启事务
Transaction transaction = session.beginTransaction();
//处理内容 查询全部
//字符串为HQL语句 Hibernate Query Language
Query query = session.createQuery("from Customer");
List<Customer> list = query.list();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
Customer customer = (Customer) iterator.next();
System.out.println(customer);
}
//提交事务
transaction.commit();
//释放资源
session.close();
}
}
7.Transaction对象
事务对象后期可以直接交给Spring管理。主要方法:commit(),rollback().
网友评论