Mybatis和Hibernate的区别
Mybatis并不是一个完全的orm框架。Hibernate是面向对象,可以不使用sql语句。Mybatis是面向sql语句的。专注的是输入映射返回值映射以及sql语句的灵活性。
传统:dao,daoimpl
impl:
SqlSession sqlSession = sessionFactory.openSession();
User user = sqlSession.selectOne("test.getUserById", id);
sqlSession.close();
return user;
存在问题:dao中操作数据库的代码重复。可以考虑使用模板替代。statementId存在硬编码的问题。
另一种是mapper代理方法,程序员只需要写mapper接口相当于dao接口
Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录。
mybatic
session缓存,可以增强变现而且处理循环 依赖也是必须的。要开启二级缓存,你需要在你的SQL映射文件中添加一行:
MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
MyBatis容易掌握,而Hibernate门槛较高。
相同:
Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。
Hibernate和MyBatis都支持JDBC和JTA事务处理。
Hibernate优势
Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。