Hibernate--Hibernate的核心API

一、Configuration:Hibernate的配置对象

  1. 加载核心配置文件
  • hibernate.properties
Configuration cfg = new Configuration();
  • hibernate.cfg.xml
Configuration cfg = new Configuration().configure();
  1. 加载映射文件【当在核心配置文件中未引入映射文件】
//手动加载映射
cfg.addSource("XXX");

二、SessionFactory:Session工厂

SessionFactory接口负责初始化Hibernate。它充当数据存储源(数据库连接池)的代理,并负责创建Session对象。

  1. SessionFactory内部维护了Hibernate的连接池和Hibernate的二级缓存(不用了);
  2. SessionFactory对象是线程安全的;
  3. 一个项目创建一个SessionFactory对象即可。-------抽取工具类
    代码如下:
package com.hibernate.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

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();
	}
}

我们对上面的工具类进行一个测试【仍然是保存客户】:

public class HibernateDemo2 {
	
	@Test
	public void Demo1() {
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		
		Customer customer = new Customer();
		customer.setCust_name("王小东");
		
		tx.commit();
		session.close();
	}
}

客户“王小东”保存成功:
在这里插入图片描述

三、Session:类似Connection对象【连接对象】

  1. Session是Hibernate与数据库的连接对象,是与数据库交互的桥梁(CRUD)。
  2. Session对象是非线程安全的,因此不能定义为全局的。
  3. Hibernate的session不同于JSP应用中的HTTPSession。这里当使用session这个术语时,指的是Hibernate中的session,而会将HTTPSession对象称为用户session。

Session的API

  1. 保存:Serializable save(Object obj);
  2. 查询:
    A. T get(Class c, Serializeable id);
    B. T load(Class c, Serializeable id);
    C. get方法和load方法的区别?(断点调试)【重点
		/**
		 * get方法:
		 * 1. 采用的是立即加载,执行到这行代码的时候,就会马上发送SQL语句去查询。
		 * 2. 查询后返回的是真实对象本身。
		 * 3. 查询一个找不到的对象的时候,返回null。
		 * 
		 * load方法:
		 * 1. 采用的是延迟加载(lazy懒加载),执行到这行代码的时候,不会发送SQL语句,
		 * 	    当真正使用这个对象时才会发送SQL语句。
		 * 2. 查询后返回的是代理对象。利用javassist技术产生的代理【javassist-3.18.1-GA.jar】
		 * 3. 查询一个找不到的对象的时候,返回OBjectNotFoundException。
		 */
  1. 修改: void update(Object obj);
public void Demo3() {
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		
		/*
		//方法1:直接创建对象,进行修改(×)
		Customer customer = new Customer();
		customer.setCust_id(1l);
		customer.setCust_name("XXX");
		session.update(customer);//这样会将cust_id 为 1的对象的其他属性值置为null
		*/
		
		//方法2:先查询,再修改(推荐)
		Customer customer = session.get(Customer.class, 1l);
		customer.setCust_name("XXX");
		session.update(customer);
		
		
		tx.commit();
		session.close();
	}
  1. 删除:void delete(Object obj);
  2. 保存或更新:void saveOrUpdate(Object obj);

四、Transaction:事务对象

Hibernate 中管理事务的对象。

  1. commit(); 提交事务
  2. rollback();事务回滚
发布了32 篇原创文章 · 获赞 3 · 访问量 1343

猜你喜欢

转载自blog.csdn.net/weixin_44270855/article/details/104540614
今日推荐