hibernate的优缺点
优点:
1)是一个优秀的orm框架,使用映射关系让dao层的开发可以面向对象的方式,简化了代码的重用性
2)对各大数据库支持性比较好,是一个轻量级跨框架
3)有优秀的缓存机制
4)透明持久化
带有持久化的状态,具有业务功能的单线程对象,此对象生存期较短,这些对象可能是普通的javabean/pojo,这个对象没有实现第三方框架或接口,唯一特殊的是他们正与(仅仅一个)session相关联,一旦这个session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自用使用
5)事务
应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短,他通过抽象将应用从底层具体的jdbc,jta以及corba事务隔离开,默写情况下,一个session之内可能包含多个transaction对象,尽管是否使用该对象是可选的,但无论是使用底层的api还会使用transaction对象,事务的边界的开启与关闭是必不可少的
缺点:
1)不适合批量处理数据
针对单一对象简单的增删改查,适合于hibernate,而对于批量的修改,删除,不适合用hibernate,这也是orm框架的弱点,要使用数据库的待定优化机制的时候,不适合使用hibernate
hibernate工作原理
1)使用configuration读取配置创建一个session工厂
2)session工厂创建一个session对象
3)session对象就和他的创建query、criteria都可以操作数据库
4)transaction管理实务
5)最后关闭session以及工厂
hibernate的核心类
1)session持久化对象管理器 是操作数据库的对象
2)sessionfactory初始化hibernate,创建session
3)configuration读取配置cfg和hbm的xml配置文件的对象
4)query用来执行数据库查询的对象
5)transaction用于管理实务的类,对底层的事务接口实现了封装
sessionfactory是一个大型对象而且线程安全,一个程序中需要一个sessionfactory创建session
hibernate操作有三种状态
瞬时(一个对象刚创建的时候,没有纳入session管理)
持久化(有id,在session中被session管理)
游离(有这个对象存在曾与上下文有关联,但不被session管理,不能保持同步更新,等待垃圾回收)
mybatis的优缺点
优点:
把sql书写提取到配置中
解除和代码的耦合性
可以灵活的控制,面对复杂的查询
便于统一管理优化,提高开发效率
缺点:
可读性低,调试非常困难,无法向jdbc那样在代码里根据逻辑实现复杂动态sql拼接
mybatis和hibernate的不同点
自动等级:
hibernate是全自动化的,只要配置映射文件,可以为我们动态的生成sql,mybatis是半自动化的,需要我们手动编写sql
dao开发:
higbernate的dao层开发比mybatis简单,mybatis需要维护sql和结果映射
缓存机制:
hibernate有更好的二级缓存机制,可以使用第三方缓存,mybatis本身的缓存机制并不是很好
数据库支持:
hibernate对于不同的数据库的支持比mybatis好 ,mybatis对于不的数据库需要编写不同的sql语句
插件提供:
mybatis提供了对应各种用途,功能的插件,hibernate这点没办法和mybatis比
多表查询:
hibernate对于多表关联比较复杂,使用成本高,sql自动生成不好进行人工的优化
个人总结:
hibernate是把表丝毫不差的映射为对象,然后获取一个可操作数据的对象,不管是session还是query,都是利用了已经封装好的方法,用操作兑现的方式来操作数据库,开发者需要关注的就是拿到对象和调用的方法
而 mybatis虽然也映射了实体和表,但是感觉更多的是为了作为参数 返回值的类型,和hibernate不是一个目的,而dao口的实现就是一个sql语句,开发者只要关注参数和sql语句即可
什么是mybatis的接口绑定,有什么好处?
接口映射就是在mybatis中定义任意接口,然后把接口里面的方法和sql语句绑定,我们直接调用接口方法就可以,对比与原生的sqlsession提供的方法有更加灵活的配置
接口的绑定有几种实现方式,分别是怎么实现的
接口绑定通常有两种实现,通过注解绑定或者通过xml文件绑定
注解绑定是放上加上@select @update 等包含sql语句的注解来绑定
xml绑定是在xml配置文件里面写sql语句进行绑定,要注意配置文件的参数必须为接口的全路径名
什么情况下用注解绑定,什么情况下用xml绑定
当sql语句比较简单的时候用注解绑定,当sql语句比较复杂用xml绑定,一般使用xml方式是比较常用的方式