对比分析:
本质
hibernate是一个完全的ORM框架,mybatis是不完全ORM框架最大的区别就是hibernate封装了sql语句。
扩展性方面。使用mybatis要自己根据相应的数据库写不同的sql实现,例如用mysql数据库写了一个sql的分页语句,如果换成了oracle数据库就用不了了。然而如果是hibernate的hql语句则是对实体类(User)和属性的操作
优化
maybatis的优化,就是对sql语句的优化
hibernate的优化:
制定合理的缓存策略;
尽量使用延迟加载特性;
采用合理的Session管理机制;
使用批量抓取,设定合理的批处理参数(batch_size);
进行合理的O/R映射设计
使用
sql语句比较简单,增删改查为主,hibernate比较好,已经自动生成SQL语句了;复杂语句较多,mybatis比较好一点,比较灵活方便管理。
工作量mybatis稍微大点。hibernate良好的映射,更专注于业务流程
hibernate会查询所有字段,有性能损耗,但是有自己的日志统计, mybatis需要用log4统计。
sql: select 字段名…from table_name where 字段名… sql是直接对数据库表的操作
hql:select 属性名…from 实体类 where 属性 条件 …group by 属性order by属性。hql是对与表有映射关系的实体类的操作,底层会再自动生成相应的sql。
缓存
** Hibernate一级缓存是Session缓存,利用好一级缓存就需要对Session的生命周期进行管理好
Hibernate二级缓存是SessionFactory级的缓存。 SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。**