MyBatis(2)MyBatis 与 Hibernate 的区别

MyBatis 和 Hibernate 都是 Java 范畴内流行的持久层框架,但它们在理念和实现方式上存在显著的差异。

MyBatis:

  • 半自动 ORM 框架:MyBatis 需要你手动编写 SQL 语句,并将 SQL 映射至 Java 对象。
  • 灵活性:它允许你完全控制 SQL 语句的编写。
  • 轻量级:相对较轻,与直接使用 JDBC 相比,MyBatis 仅仅是对 JDBC 的轻量封装。

Hibernate:

  • 全自动 ORM 框架:Hibernate 是一个全自动的对象关系映射框架,可以不必编写 SQL 语句。
  • 高度封装:它封装了很多数据库操作的细节,通过 HQL(Hibernate Query Language)或 JPQL(Java Persistence Query Language)来执行查询,也支持原生 SQL。
  • 重量级:相对较重,提供了更多的特性,如:一级缓存、二级缓存、延迟加载、热更新等。

源码解析与代码演示:

MyBatis 源码关键点:
  • SqlSessionFactory:创建 SqlSession 的工厂类,由 SqlSessionFactoryBuilder 通过读取配置文件构建。

    String resource = "org/mybatis/example/mybatis-config.xml";
    Reader reader = Resources.getResourceAsReader(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    
  • SqlSession:用于执行 SQL 操作的对象,它包含了对数据库执行操作所需要的所有方法。

    try (SqlSession session = sqlSessionFactory.openSession()) {
      Blog blog = session.selectOne("com.myapp.mapper.BlogMapper.selectBlog", 101);
    }
    
  • Mapper Interface:SQL 映射的 Java 接口,MyBatis 会为这些接口生成代理对象来执行实际的数据库操作。

    try (SqlSession session = sqlSessionFactory.openSession()) {
      BlogMapper mapper = session.getMapper(BlogMapper.class);
      Blog blog = mapper.selectBlog(101);
    }
    
Hibernate 源码关键点:
  • SessionFactory:创建 Session 的工厂类,由 Configuration 类通过读取配置文件构建。

    Configuration configuration = new Configuration().configure();
    SessionFactory sessionFactory = configuration.buildSessionFactory();
    
  • Session:用于执行持久化操作的对象,类似于 JDBC 中的 Connection,它封装了 JDBC 连接,并提供了 CRUD 功能。

    try (Session session = sessionFactory.openSession()) {
      Transaction tx = session.beginTransaction();
      Blog blog = session.get(Blog.class, 1);
      tx.commit();
    }
    
  • Entity:标记为 @Entity 的 Java 类,其属性映射至数据库表的列,默认情况下类名对应数据库表名,属性名对应列名。

    @Entity
    public class Blog {
      @Id
      private Integer id;
      private String title;
      // ...
    }
    

MyBatis 与 Hibernate 的比较:

控制:
  • MyBatis:允许你完全控制 SQL,适合需要精细优化 SQL 或拥有复杂查询的场景。
  • Hibernate:自动管理 SQL,减少了手动编写和优化 SQL 的需要,但在一些复杂场景下可能无法做到最优。
性能:
  • MyBatis:因为允许手动优化 SQL,所以在性能上可以通过优化 SQL 语句来获得更好的性能。
  • Hibernate:内置缓存和延迟加载等特性可以提升性能,但在生成的 SQL 不够优化时可能会出现性能问题。
复杂性:
  • MyBatis:配置相对简单,学习曲线较为平缓。
  • Hibernate:功能强大,但配置和理解其内部工作原理相对复杂。
适用场景:
  • MyBatis:适合对 SQL 优化要求高、数据库设计复杂或者希望更直接地控制 SQL 的项目。
  • Hibernate:适合数据库设计相对规范、希望快速开发且不需要深入控制 SQL 的项目。

总结来说,MyBatis 和 Hibernate 都有各自的优势和缺点。选择哪一个框架主要取决于项目的需求、团队的熟悉度以及对性能和控制层面的考虑。

  • 31
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辞暮尔尔-烟火年年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值