首先,Mybatis和Hibernate都是持久层框架,狭义上来说,Mybatis和Hibernate不同点就是Mybatis属于半自动的映射工具,而Hibernate属于全自动的映射工具。具体的话有以下几点不同:
- 因为Mybatis是半自动的,所以在涉及数据库的相关操作时,需要自行编写SQL语句,而Hibernate的SQL语句则是自行生成。
- Hibernate数据库移植性要比Mybatis强,Hibernate提供了强大的映射结构和hql语言,大大降低了对象与数据库之间的耦合度。
- Hibernate的日志系统更加强大,包括SQL记录,关系异常,缓存提示,优化警告等,而Mybatis除了一些常用的日志功能外,对于其他方面的有所欠缺。
- Hibernate的缓存机制比Mybatis强。
- 对于SQL的直接优化,因为Hibernate的sql是自动编写的,所以不方便对SQL进行直接优化,虽然说Hibernate有hql,但涉及到一些较为复杂的查询时,如报表,hql就力不从心了,而Mybatis的sql是由我们手动编写,我们可以直接在编写时进行SQL优化,如使用表别名,不适用*,尽量使用索引,where代替having等操作进行SQL优化。