Mybatis 与hibernate
共同点
(1)hibernate与mybatis都是通过sessionfactorybuider由xml配置文件生成sessionfactory,由sessionfactory 生成session,由session来开启执行事务和sql(structured query language,结构化查询语言)语句。
(2)hibernate和mybatis都支持jdbc(java database connectivity,java数据库连接)和jta(java transaction api,java事务api(application programming interface,应用程序编程接口))事务处理。
注:jdbc和jta的主要作用是增强数据访问能力。
(3)基于orm(object relational mapping, 对象关系映射)思想解决了entity和数据库的映射问题
区别:
(1)sql方面:mybaits通过mapper.xml维护映射结果,程序员手动编写sql相比hibernate自动生成hql(hibernate sql)更加灵活,sql调优更加容易(hibernate因为更好的封装性,开发效率提高的同时,sql语句调优要更费力,当然可以手动修改sql来优化,但是同时也会影响开发效率);hibernate的hql数据库移植性更好,体现在强壮性。hibernate在级联删除的时候效率低;数据量大, 表多的时候,基于关系操作会变得复杂。
(2)缓存方面:mybatis和hibernate都可以使用第三方缓存,而hibernate相比maybatis有更好的二级缓存机制
(3)结构
hibernate:hibernate是当前最流行的orm框架之一,对jdbc提供了较为完整的封装。hibernate的o/r mapping实现了pojo 和数据库表之间的映射,以及sql的自动生成和执行。
mybatis:mybatis同样也是非常流行的orm框架,主要着力点在于 pojo 与 sql 之间的映射关系。然后通过映射配置文件,将sql所需的参数,以及返回的结果字段映射到指定 pojo 。相对hibernate“o/r”而言,mybatis 是一种“sql mapping”的orm实现。
(4)难易度
hibernate的真正掌握要比mybatis困难,hibernate比mybatis更加重量级一些。
mybatis框架相对简单很容易上手,但也相对简陋些。
(5)开发工作量
mybatis需要我们手动编写sql语句,回归最原始的方式,所以可以按需求指定查询的字段,提高程序的查询效率。
hibernate也可以自己写sql语句来指定需要查询的字段,但这样破坏了hibernate封装以及简洁性
hibernate优势
- hibernate的dao层开发比mybatis简单,mybatis需要维护sql和结果映射。
- hibernate对对象的维护和缓存要比mybatis好,对增删改查的对象的维护要方便。
- hibernate数据库移植性很好,mybatis的数据库移植性不好,不同的数据库需要写不同sql。
- hibernate有更好的二级缓存机制,可以使用第三方缓存。mybatis本身提供的缓存机制不佳
- mybatis可以进行更为细致的sql优化,可以减少查询字段。
mybatis优势
mybatis容易掌握,而hibernate门槛较高。
上一篇: SpringBoot配置多环境