hibernate核心API

Hibernate的核心接口:Configuration、SessionFactory、Session、Transaction通过这些对象不仅可以对持久化对象进行存取,还能够进行事务控制;

1.Configuration接口(作用:加载核心配置文件)

①使用xml配置核心文件

Configuration cfg = new Configuration.configure();

 Hibernate会自动在目录下搜索hibernate.cfg.xml文件,并将其读取到内存中作为后续操作的基础配置;

 注意:如果在hibernate中没有配置映射文件,需要手动加载

cfg.addResource("映射文件的全路径");

②使用属性文件配置核心文件

Configuration cfg = new Configuration();

注意:属性文件不能直接引入映射文件,必须手动加载

cfg.addResource("映射文件的全路径");

2.SessionFactory接口(作用:充当数据存储源代理,并负责创建Session对象)

注意:SessionFactory并不是轻量级的,一个应用通常只需要一个SessionFactory;当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory

类似于连接池的作用

工具类:

public class HibernateUtils {
	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();
	}

}

3.Session接口(作用:session代表的是hibernate与数据库的连接对象,不是线程安全的。与数据库交互的桥梁)

Session是hibernate持久化操作的基础,提供了众多持久化对象的CRUD操作;

①保存数据:Serializable save(Object obj);

实例:

public class HibernateDemo2 {	
	@Test
	public void demo1(){
		Session session = HibernateUtils.openSession();
		//4.手动开启事务
		Transaction transaction = session.beginTransaction();
		//5.编写代码,创建对象
		Customer customer = new Customer();
		customer.setCust_name("王东东");	
        //保存对象	
		session.save(customer);		
		//6.事务提交
		transaction.commit();
		//7.资源释放
		session.close();
	}
}

②查询数据的方法有两种,分别为

1. T get(Class c,Serializable id);

2. T load(Class c,Serializable id);

get方法的和load方法的区别:

1.get方法是立即查询,执行到该方法的时候会马上发送sql语句查询;

   get方法查询返回的对象是真实对象;

   get方法查询如果没有查询到数据会返回null

2.load方法是延迟查询(lazy加载),不会马上发送sql语句,而是当需要使用这个对象的时候才会发送sql语句

  load方法返回的是代理对象

  load方法没有查询到数据的时候,会报objectnotfoundexception错误;

实例:

	@Test
	public void demo2(){
		Session session = HibernateUtils.openSession();
		//4.手动开启事务
		Transaction transaction = session.beginTransaction();
		//5.get方法
		Customer customer = session.get(Customer.class, 2L);
		System.out.println(customer);
		//5.load方法
		Customer customer2 = session.load(Customer.class, 3L);
		System.out.println(customer2);
		//6.事务提交
		transaction.commit();
		//7.资源释放
		session.close();
	}

在debug模式下,在查询和输出设置两个端点,可以看出;

3.删除数据:void delete(Object obj);

实例:

	@Test
	public void demo3(){
		Session session = HibernateUtils.openSession();
		//4.手动开启事务
		Transaction transaction = session.beginTransaction();

		//5.先查询再删除(使数据存入一级缓存,再删除,事务提交后会根据快照进行更新)
		Customer customer = session.get(Customer.class, 2L);
		session.delete(customer);
		//6.事务提交
		transaction.commit();
		//7.资源释放
		session.close();
	}

4.更新数据:void update(Object obj);

实例:

	public void demo4(){
		Session session = HibernateUtils.openSession();
		//4.手动开启事务
		Transaction transaction = session.beginTransaction();

		//5.先查询再修改(使数据存入一级缓存,再修改,事务提交后会根据快照进行更新)
		Customer customer = session.get(Customer.class, 3L);
		customer.setCust_name("小黑");
		session.update(customer);
		//6.事务提交
		transaction.commit();
		//7.资源释放
		session.close();
	}

5.保存或更新:void saveOrUpdate(Object obj)

如果对应的数据存在则更新,没有则保存

实例

	public void demo5(){
		Session session = HibernateUtils.openSession();
		//4.手动开启事务
		Transaction transaction = session.beginTransaction();

		//5.创建对象,保存后如果对象的唯一标识和表中的主键对应,则更新数据;没有对应的则保存对象
		Customer customer = new Customer();
		customer.setCust_id(1L);
		customer.setCust_name("小白");
		session.saveOrUpdate(customer);
		//6.事务提交
		transaction.commit();
		//7.资源释放
		session.close();
	}

4.Transaction接口:事务对象

在事务的开启后,对事务的提交或回滚 

事务对象通过session创建

Transaction transaction = session.beginTransaction();

事务提交

transaction.commit();

事务回滚

transaction.rollback();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值