Hibernate相关API总结

本文总结了Hibernate7个核心API:Configuration、SessionFactory、Session、Transaction、Query、Criteria、SQLQuery


 

目录

Configuration:配置对象

SessionFactory:Session工厂对象

 Session:

Transaction

Query

Criteria

SQLQuery



  • Configuration:配置对象

Configuration主要用于Hibernate框架加载映射文件

Configuration类的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration类在整个Hibernate项目中扮演着一个很小的角色,但它是启动hibernate时所遇到的第一个对象。

在使用Hibernate时,首先要创建Configuration实例,Configuration实例主要用于启动、加载、管理hibernate的配置文件信息。

Configuration config = new Configuration();
config.configure();

src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面。


  • SessionFactory:Session工厂对象

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。

SessionFactory接口负责Hibernate的初始化和建立Session对象。它在Hibernate中起到一个缓冲区作用,Hibernate可以将自动生成的SQL语句、映射数据以及某些可以重复利用的数据放在这个缓冲区中。同时它还保存了对数据库配置的所有映射关系,维护了当前的二级缓存。

在核心配置文件中,数据库配置方面:

<!-- hibernate帮创建表,需要配置之后 
	 update: 如果已经有表,更新,如果没有,创建
-->
	<property name="hibernate.hbm2ddl.auto">update</property>

具体实现(写工具类,写静态代码块实现,因为静态代码块在类加载时候执行,执行一次)

public class HibernateUtils {

	static Configuration cfg = null;
	static SessionFactory sessionFactory = null;
	//静态代码块实现
	static {
		//加载核心配置文件
		cfg = new Configuration();
		cfg.configure();
		sessionFactory = cfg.buildSessionFactory();
	}
		
	//提供方法返回sessionFactory
	public static SessionFactory getSessionFactory() {
		return sessionFactory;
	}
}

  •  Session:

Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。同时,Hibernate的Session不同于JSP应用中的HttpSession。这里当使用Session这个术语时,其实是指Hibernate中的Session,而以后会将HttpSession对象称为用户Session。

Session是应用程序与数据库之间交互操作的一个单线程对象,是Hibernate运作的中心,它的主要功能是为持久化对象提供创建、读取和删除的能力,所有持久化对象必须在Session的管理下才能进行持久化操作。

获取Session对象的操作(两种操作)

//2 获取session,创建的是一个新的Session实例,需手动关闭
		Session session = sessionFactory.openSession();
//2 获取session,绑定在了当前线程中,自动关闭
        Session session = sessionFactory.getCurrentSession();

调用session里面不同的方法实现crud操作

(1)添加 save方法

(2)修改 update方法

(3)删除 delete方法

(4)查询 get方法(根据主键查询)

(5)createQuery、createSQLQuery方法(用于数据库操作对象)

(6)createCriteria方法(条件查询)


  • Transaction​​​​​​​

​​​​​​​Transaction接口是一个可选的API,可以选择不使用这个接口,取而代之的是Hibernate的设计者自己写的底层事务处理代码。Transaction接口是对实际事物实现的一个抽象,这些实现包括JDBC的事物、JTA中的UserTransaction、甚至可以是CORBA事物。之所以这样设计是让开发者能够使用一个统一事物的操作界面,使得自己的项目可以在不同的环境和容器之间方便移植。

Transaction接口主要用于管理事物,它是Hibernate的数据库事物接口,且对底层的事务接口进行了封装。

事务开启的实现:

Transaction tx = session.beginTransaction();

事务管理的常用方法:(事务的提交与回滚) 

// 提交事务
	tx.commit();
// 回滚事务
        tx.rollback();

  • Query

Query代表面向对象的一个Hibernate查询操作。在Hibernate中,通常使用session.createQuery()方法接受一个HQL语句,然后调用Query的list()或uniqueResult()方法执行查询。

HQL语句hibernate query languagehibernate提供查询语言,这个hql语句和普通sql语句很相似

区别:

——使用sql操作表和表字段

——使用hql操作实体类和属性

使用Query对象查询:

                        //1 创建Query对象
			//方法里面写hql语句
			Query query = session.createQuery("from User");
			
			//2 调用query对象里面的方法得到结果
			List<User> list = query.list();
			
					
			for (User user : list) {
				System.out.println(user);
			}

 


  • Criteria

使用这个对象查询操作,但是使用这个对象的时候,不需要写语句,直接调用方法实现。

2.  实现过程

(1)创建criteria对象

(2)调用对象里面的方法得到结果​​​​​​​

                        //1 创建criteria对象
			//方法里面参数是实体类class
			Criteria criteria = session.createCriteria(User.class);
			//2 调用方法得到结果
			List<User> list = criteria.list();
			
			for (User user : list) {
				System.out.println(user);
			}

  • SQLQuery

使用hibernate时候,调用底层sql实现

2.  实现过程

(1)创建对象

(2)调用对象的方法得到结果

//1 创建对象
//参数普通sql语句
    SQLQuery sqlQuery = session.createSQLQuery("select * from t_user");



//调用sqlQuery里面的方法
//返回list集合,默认里面每部分数组结构
    List<Object[]> list = sqlQuery.list();
			
    for (Object[] objects : list) {
    System.out.println(Arrays.toString(objects));
    }



//返回的list中每部分是对象形式,设置将数据放到参数表示的实体中去
    sqlQuery.addEntity(User.class);
			
//调用sqlQuery里面的方法
    List<User> list = sqlQuery.list();
			
    for (User user : list) {
    System.out.println(user);
    }
			

 


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值