框架-- Hibernate及Mybatis

Posted z1427094386

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了框架-- Hibernate及Mybatis相关的知识,希望对你有一定的参考价值。

框架-- Hibernate
一、Hibernate 中get 和 load的区别
1、加载方式:
	load 为延迟加载(返回的是一个只有id属性的代理,只有使用该对象属性时,才发出sql语句);
	get 为立即加载(执行时,会立即向数据库发出sql语句)
	
2、返回结果:
	load 检索不到记录时,会抛ObjectNotFoundException异常
	get 检索不到记录时,会返回null
	
二、Hibernate、Ibatis、Jdbc三者的区别
	Hibernate属于全自动,Mybatis属于半自动,Jdbc属于手动,从开发效率上讲hibernate较高,Mybatis居中,jdbc较低,从执行效率上讲hibernate较低,Mybatis居中,jdbc较高,因为jdbc是手工写sql语句,程序员对sql的控制能力更大,可以根据业务需要进行优化,而Mybatis虽然也可以对sql进行优化,但是他里面将resultset封装为实体的过程中采用了反射机制所以一定程度上影响了性能,而hibernate因为高度封装所以开发效率相对较高,但正因为这个原因,所以程序员在对sql语句的控制和优化方面相对比较弱,而且在将resultset封装成实体的过程中也采用了反射机制,所以在性能方面较低。
	
三、Hibernate的运行原理
	首先通过configuration去加载hibernate.cfg.xml这个配置文件,根据配置文件的信息去创建sessionFactory,sessionFactory是线程安全的,是一个session工厂,用来创建session,session是线程不安全的,相当于jdbc的connection,最后通过session去进行数据库的各种操作,在进行操作的时候通过transaction进行事务的控制。
	
四、Hibernate五大核心(类/接口)简述
1 .Configuration接口
	Configuration接口的作用是对Hibernate进行配置,以及对它进行启动。(加载hibernate.cfg.xml)并创建一个SessionFactory对象。
2 .SessionFactory接口
	SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。SessionFactory是线程安全的。
3 .Session接口
	Session(会话)接口是Hibernate应用使用的主要接口。Session接口负责执行被持久化对象的CRUD操作(增删改查)。Session对象是非线程安全的。Session 相当于jdbc的connection
4 .Query与Criteria接口
	总之Query和Criteria接口负责执行各种数据库查询。
5 .Transaction接口
	Transaction(事务)负责操作相关的事务。

五、Hibernate与JDBC的区别
1、hibernate和jdbc主要区别就是,hibernate先检索缓存中的映射对象( 即hibernate操作的是对象),而jdbc则是直接操作数据库.
2、Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架。Hibernate可以用在任何JDBC可以使用的场合
3、Hibernate是一个和JDBC密切关联的框架,所以Hibernate的兼容性和JDBC驱动,和数据库都有一定的关系,但是和使用它的Java程序,和App Server没有任何关系,也不存在兼容性问题。
4、如果正确的使用JDBC技术,它的执行效率一定比hibernate要好,因为hibernate是基于jdbc的技术.
5、JDBC使用的是SQL语句,Hibernate使用的是HQL语句,但是HQL语句最终还会隐式转换成SQL语句执行。

六、Hibernate中的两大配置文件
	*.hbm.xml:主键生成策略,映射关系,一对多,一对一的关系。
	Hibernate.cfg.xml:方言(用哪个数据库),数据库连接信息,包含*.hbm.xml内容,映射		文件,也可以配事务。
	
七、Hibernate事务处理
	开启事务 session.beginTransaction();
	执行相关的操作,如果成功则session.getTransaction().commit();
	执行操作失败则 session.getTransaction.rollback();
	
八、Hibernate的三种状态以及状态的转换
	Transient(临时)
	new 一个初始化对象后,并没有在数据库里保存数据,处于临时状态;
	Persistent(持久化)
	当执行save()方法,调用session.close()方法之前,内存中的对象与数据库有           对应关系处于持久化状态;
	Detached(托管/游离)
	当执行session.close()之后,处于托管状态;
	状态的转换
	处于托管状态下,调用update()方法后,转换为持久化状态;
	在持久化状态下,执行delete()方法后,转换为临时状态;
	在未初始化对象之前,调用get(),load(),find(),iterate()之后,直接进入持久化状态。
框架--Mybatis
一、# 与 $区别
	1) #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号;$将传入的数据直接显示生成在sql中;
	2) #方式能够很大程度防止sql注入;
	3) $方式一般用于传入数据库对象;
二、Mybatis分页
	1、内存分页,利用自动生成的example类,加入mybatis的RowBounds类,在调用的接口中添加给类的参数;
	2、物理分页,在自动生成的example对象中,加入两个成员变量start、和limit,在对应的xml的方法中添加刚刚加入的条件,直接添加在自动生成的orderByClause后面;

三、Mybatis配置文件
在这里插入图片描述
四、collection、assications
1、association通常用来映射一对一的关系
2、collection 用来出来一对多的关系
五、Mybatis打印日志
1、在mybatis-config.xml文件中配置如下:
在这里插入图片描述
2、在spring-core.xml文件中配置如下在这里插入图片描述
3、创建文件log4j.properties。

以上是关于框架-- Hibernate及Mybatis的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis和Hibernate面试问题及答案

Mybatis和Hibernate框架的区别

hibernate工作原理及为啥要用

分享知识-快乐自己:初识 Hibernate 概念片

MyBatis框架

mybatis与hibernate对比