框架-- 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。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z1427094386

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值