首页 > 其他分享 >hibernate和mybatis的区别

hibernate和mybatis的区别

时间:2023-07-04 19:22:06浏览次数:37  
标签:hibernate 映射 区别 MyBatis 二级缓存 Hibernate SQL mybatis 缓存

Hibernate 和 MyBatis 都是目前业界中主流的对象关系映射(ORM)框架,它们的主要区别如下。

1)sql 优化方面

  • Hibernate 使用 HQL(Hibernate Query Language)语句,独立于数据库。不需要编写大量的 SQL,就可以完全映射,但会多消耗性能,且开发人员不能自主的进行 SQL 性能优化。提供了日志、缓存、级联(级联比 MyBatis 强大)等特性。
  • MyBatis 需要手动编写 SQL,所以灵活多变。支持动态 SQL、处理列表、动态生成表名、支持存储过程。工作量相对较大。

2)开发方面

  • MyBatis 是一个半自动映射的框架,因为 MyBatis 需要手动匹配 POJO 和 SQL 的映射关系。
  • Hibernate 是一个全表映射的框架,只需提供 POJO 和映射关系即可。

3)缓存机制比较

Hibernate 的二级缓存配置在 SessionFactory 生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置缓存。

MyBatis 的二级缓存配置在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且 Mybatis 可以在命名空间中共享相同的缓存配置和实例,通过 Cache-ref 来实现。

Hibernate 对查询对象有着良好的管理机制,用户无需关心 SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。而 MyBatis 在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免 Cache 的盲目使用。否则脏数据的出现会给系统的正常运行带来很大的隐患。

4)Hibernate 优势

  • Hibernate 的 DAO 层开发比 MyBatis 简单,Mybatis 需要维护 SQL 和结果映射。
  • Hibernate 对对象的维护和缓存要比 MyBatis 好,对增删改查的对象的维护要方便。
  • Hibernate 数据库移植性很好,MyBatis 的数据库移植性不好,不同的数据库需要写不同 SQL。
  • Hibernate 有更好的二级缓存机制,可以使用第三方缓存。MyBatis 本身提供的缓存机制不佳。

5)Mybatis优势

  • MyBatis 可以进行更为细致的 SQL 优化,可以减少查询字段。
  • MyBatis 容易掌握,而 Hibernate 门槛较高。

6)应用场景

MyBatis 适合需求多变的互联网项目,例如电商项目、金融类型、旅游类、售票类项目等。

Hibernate 适合需求明确、业务固定的项目,例如 OA 项目、ERP 项目和 CRM 项目等。

总结

总的来说,MyBatis 是一个小巧、方便、高效、简单、直接、半自动化的持久层框架,Hibernate 是一个强大、方便、高效、复杂、间接、全自动化的持久层框架。

对于性能要求不太苛刻的系统,比如管理系统、ERP 等推荐使用 Hibernate,而对于性能要求高、响应快、灵活的系统则推荐使用 MyBatis。

标签:hibernate,映射,区别,MyBatis,二级缓存,Hibernate,SQL,mybatis,缓存
From: https://www.cnblogs.com/huigui-mint/p/17526783.html

相关文章

  • elasticsearch best_fields most_fields cross_fields从内在实现看区别——本质就是前
    1.最佳字段(Bestfields)::假设我们有一个让用户搜索博客文章的网站(允许多字段搜索,最佳字段查询),就像这两份文档一样:PUT/my_index/my_type/1{"title":"Quickbrownrabbits","body":"Brownrabbitsarecommonlyseen."}PUT/my_index/my_type/2{"......
  • java 组合>聚合>关联>依赖 的区别
    出处:https://zhuanlan.zhihu.com/p/359672087简单来讲,组合是一种较为紧密的关系,从生命周期上看,部分和整体是共存亡的关系。聚合则是一种较为松散的关系,部分和整体的生命周期未必一致。在实际代码中:组合关系中,部分的实例化在整体中进行。聚合关系中,部分的实例化过程在整体外进行,......
  • jar 和 war 的区别
    通过jar运行实际上是启动了内置的tomcat,所以用的是应用的配置文件中的端口直接部署到tomcat之后,内置的tomcat就不会启用,所以相关配置就以安装的tomcat为准,与应用的配置文件就没有关系了jar包和war包的区别1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模......
  • @NotNull、@NotBlank、@NotEmpty的区别
    @NotNull: 平常用于基本数据的包装类(Integer,Long,Double等等),如果@NotNull注解被使用在String类型的数据上,则表示该数据不能为Null,但是可以为空字符串(“”),空格字符串(“”)等。@NotEmpty: 平常用于String、Collection集合、Map、数组等等,@NotEmpty 注解的参数不能为N......
  • MyBatis
    MyBatis是一款优秀的持久层框架,用于简化JDBC开发官网:https://mybatis.org/mybatis-3/zh/index.html持久层负责将数据到保存到数据库的那一层代码JavaEE三层架构:表现层、业务层、持久层框架框架就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型在框......
  • Hibernate详细教程
    Hibernate学习总结----一、搭建Hibernate环境1.在src目录下创建hibernate.cfg.xml配置文件PS:文件的名字不能改!<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN&......
  • JavaScript中的if与switch的区别是什么?
    很多同学问我if和swicth的区别,今天我就从多个维度来和大家分析一下if与switch的区别到底是什么?1.语法结构:if语句:使用if关键字后接条件表达式,如果条件为真,则执行if块中的代码。switch语句:使用switch关键字后接一个表达式,根据表达式的值匹配相应的case标签,并执行对应的代码块。2.可读......
  • JavaScript中的if与switch的区别是什么?
    很多同学问我if和swicth的区别,今天我就从多个维度来和大家分析一下if与switch的区别到底是什么?1.语法结构:if语句:使用if关键字后接条件表达式,如果条件为真,则执行if块中的代码。switch语句:使用switch关键字后接一个表达式,根据表达式的值匹配相应的case标签,并执行对应的代码块。2.可读......
  • 从 JDBC 到 Mybatis
    JDBC操作数据库流程1、加载驱动2、获取数据库连接3、获取执行者对象4、执行sql语句并返回结果5、处理结果代码publicclassJDBCTest{publicstaticvoidmain(String[]args)throwsClassNotFoundException,SQLException{//注册驱动C......
  • 03_MyBatis02
    1.深入Mybatis映射配置文件1.1.CRUD语句定义查询语句UserMapper.java接口中publicList<User>queryAllUser();publicUserqueryUserById(Integerid);UserMapper.xml配置文件中<selectid="queryAllUser"resultType="uSer"> select*fromuser;</......