hibernate与mybatis

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方式是比较常用的方式

 

你可能感兴趣的:(数据持久层框架,hibernate,mybatis)