Mybatis与传统jdbc和Hibernate的比较

原生态的jdbc的存在的问题:Hibernate 和 Mybatis 两者相比的优缺点:实际项目关于Hibernate和Mybatis的选型:

原生态的jdbc的存在的问题:

1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。

对比MyBatis:使用数据库连接池管理数据库连接。

2、将sql语句硬编码到java代码中(并且分散在各个Java类中),如果sql语句修改(比如where条件改变),需要重新编译java代码,不利于系统维护。

对比MyBatis:将sql语句统一集中配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

3、向preparedStatement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。

这种方式本身就有一定发 局限性,它是按照一定顺序传入参数的,要与占位符一一匹配。但是,如果我们传入的参数是不确定的(比如列表查询,根据用户填写的查询条件不同,传入查询的参数也是不同的,有时是一个参数、有时可能是三个参数),那么我们就得在后台代码中自己根据请求的传入参数去拼凑相应的SQL语句.

对比MyBatis:将sql语句及占位符号和参数全部配置在xml中。

4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。

对比MyBatis:将查询的结果集,自动映射成java对象。

5.重复SQL语句问题,几个功能的SQL语句其实都差不多,有些可能是SELECT后面那段不同、有些可能是WHERE语句不同.

对比MyBatis:将SQL片段模块化,将重复的SQL片段独立成一个SQL块,然后在各个SQL语句引用重复的SQL块。

Hibernate 和 Mybatis 两者相比的优缺点:

1、开发上手难度

Hibernate的真正掌握(封装的功能和特性非常多)要比Mybatis来得难。

在真正产品级应用上要用Hibernate,不仅对开发人员的要求高,hibernate往往还不适合(多表关联查询等)。

2、系统调优调优方案对比

Hibernate:

  • 制定合理的缓存策略;
  • 尽量使用延迟加载特性;
  • 采用合理的Session管理机制;
  • 使用批量抓取,设定合理的批处理参数(batch_size);
  • 进行合理的O/R映射设计

Mybatis:

  • MyBatisSession方面和HibernateSession生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。
  • MyBatis可以进行详细的SQL优化设计。

3、SQL优化方面

  • Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。
  • Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。
  • Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。

总的来说,Hibernate使用的是封装好,通用的SQL来应付所有场景,而Mybatis是针对响应的场景设计的SQL。Mybatis的SQL会更灵活、可控性更好、更优化。

4、移植性

Hibernate与具体数据库的关联只需在XML文件中配置即可,所有的HQL语句与具体使用的数据库无关,移植性很好。

MyBatis项目中所有的SQL语句都是依赖所用的数据库的,虽然可以使用lang属性来指定加载SQL,但是开发工作量更多,所以不同数据库类型的支持不好。

5、JDBC

Hibernate是在JDBC上进行了一次封装。

Mybatis是基于原生的JDBC的。Mybatis有运行速度上的优势。

6、功能、特性丰富程度

Hibernate提供了诸多功能和特性。要全掌握很难。

Mybatis 自身功能很有限,但Mybatis支持plugin,可以使用开源的plugin来扩展功能。

7、动态SQL

Mybatis mapper xml 支持动态SQL

Hibernate不支持

实际项目关于Hibernate和Mybatis的选型:

  1. 数据量:有以下情况最好选用Mybatis

    如果有超过千万级别的表;

    如果有单次业务大批量数据提交的需求(百万条及以上的),这个尤其不建议用Hibernate

    如果有单次业务大批量读取需求(百万条及以上的)(注,hibernate多表查询比较费劲,用不好很容易造成性能问题);

  2. 表关联复杂度

    如果主要业务表的关联表超过20个(大概值),不建议使用hibernate

  3. 人员

    如果开发成员多数不是多年使用hibernate的情况,建议使用mybatis

  4. 数据库对于项目的重要程度

    如果项目要求对于数据库可控性好,可深度调优,用mybatis

分类: MyBatis

49 条评论

mybatis与hibernate的区别 – 源码巴士 · 2022年9月22日 上午1:30

[…] 12、Mybatis与传统jdbc和Hibernate的比较 – 程序员小污 (hugr.cn) https://hugr.cn/2019/12/28/mybatis%E4%B8%8E%E4%BC%A0%E7%BB%9Fjdbc%E5%92%8Chibernate%E7%9A%84%E6%AF%94%E8%BE%83/ […]

คาสิโนออนไลน์เว็บไหนดี ต้อง LSM99 บาคาร่าเว็บตรงไม่ผ่านเอเย่นต์ · 2023年10月4日 上午6:18

… [Trackback]

[…] Read More Information here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ป้ายกรุงเทพ · 2023年10月4日 上午7:04

… [Trackback]

[…] Here you can find 11351 more Information to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

Hunter898 แจกเครดิตฟรี · 2023年10月6日 上午8:42

… [Trackback]

[…] Info on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

พรมกระดุม · 2023年10月7日 上午8:28

… [Trackback]

[…] There you will find 66638 additional Information on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

โซล่าเซลล์ · 2023年10月13日 上午7:24

… [Trackback]

[…] Read More here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

เครื่องมือแพทย์ความงาม · 2023年10月13日 上午9:31

… [Trackback]

[…] Info to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

PG · 2023年10月22日 上午7:14

… [Trackback]

[…] Info on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

hpl laminate decorative · 2023年10月22日 上午7:45

… [Trackback]

[…] Read More Info here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

super kaya 88 slot · 2023年10月23日 上午1:55

… [Trackback]

[…] Find More to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

pinup casino aviator · 2023年10月23日 下午6:56

… [Trackback]

[…] Here you will find 50155 more Information on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

วิธีซื้อ สลากดิจิทัล VS หวยออนไลน์ LSM99 · 2023年10月26日 上午6:21

… [Trackback]

[…] Find More Information here to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

IWI Tavor TS12 OD Green 12GA 18.5" 15Rd · 2023年10月27日 上午9:50

… [Trackback]

[…] Read More Information here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

führerschein kaufen legal · 2023年10月29日 上午7:34

… [Trackback]

[…] Find More Info here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

führerschein kaufen original · 2023年10月30日 上午7:32

… [Trackback]

[…] Read More Info here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

führerschein kaufen online · 2023年11月1日 上午8:22

… [Trackback]

[…] Find More on on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

benelli shotguns for sale · 2023年11月5日 上午8:17

… [Trackback]

[…] Here you can find 82495 more Info to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

แฟชั่นเกาหลี · 2023年11月6日 上午8:25

… [Trackback]

[…] Read More on to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

สมัคร สล็อตออนไลน์ · 2023年11月6日 上午9:46

… [Trackback]

[…] Find More on to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

จุดเด่นของ slot demo 2023 LSM99 · 2023年11月8日 上午8:30

… [Trackback]

[…] Here you will find 9074 more Info on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

หวยออนไลน์ · 2023年11月8日 上午9:55

… [Trackback]

[…] Find More here to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

แทงบอล lsm99 · 2023年11月10日 上午11:47

… [Trackback]

[…] Find More on on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

fushion hair extension technician cuffley · 2023年11月10日 下午11:12

… [Trackback]

[…] Find More to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

แทงหวยออนไลน์ · 2023年11月11日 下午11:34

… [Trackback]

[…] Find More Info here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

แทงหวย · 2023年11月12日 上午10:47

… [Trackback]

[…] Information to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

buy liquid k2 on paper · 2023年11月13日 上午9:49

… [Trackback]

[…] Read More Information here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

slot88 jackpot · 2023年11月13日 下午2:00

… [Trackback]

[…] Find More Info here to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

führerschein kaufen · 2023年11月16日 上午8:29

… [Trackback]

[…] Here you will find 42206 additional Info on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

웹툰 사이트 · 2023年11月16日 上午9:06

… [Trackback]

[…] There you will find 34250 more Info to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ทดสอบสมรรถภาพ นักกีฬา · 2023年11月16日 上午10:01

… [Trackback]

[…] Read More here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

führerschein kaufen online · 2023年11月17日 上午7:41

… [Trackback]

[…] Information on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ข่าวกีฬา · 2023年11月17日 上午9:00

… [Trackback]

[…] Find More on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

โปรแกรมพรีเมียร์ลีก · 2023年11月17日 上午10:14

… [Trackback]

[…] Find More to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ราคาบอลวันนี้ · 2023年11月17日 上午10:52

… [Trackback]

[…] Info on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

หวยออนไลน์ มีกี่ประเภท อะไรบ้าง? · 2023年11月18日 上午8:20

… [Trackback]

[…] Here you can find 27918 additional Information on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ขออย · 2023年11月18日 上午8:42

… [Trackback]

[…] Find More Info here on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

superkaya88 · 2023年11月18日 下午4:51

… [Trackback]

[…] Read More on on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

สล็อตวอเลท ไม่มีขั้นต่ำ · 2023年11月20日 上午7:31

… [Trackback]

[…] Info on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

บาคาร่า ok คาสิโน เล่นยังไง ? · 2023年11月20日 上午8:37

… [Trackback]

[…] Find More here to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

portable sawmill · 2023年11月20日 下午12:47

… [Trackback]

[…] Info to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ICSI · 2023年11月21日 上午9:00

… [Trackback]

[…] Here you can find 91276 additional Information on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ฝากไข่ · 2023年11月21日 上午9:11

… [Trackback]

[…] Find More to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

pgslot · 2023年11月22日 上午7:58

… [Trackback]

[…] Here you can find 24870 additional Information on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

AMB POKER · 2023年11月22日 上午8:23

… [Trackback]

[…] There you can find 31807 additional Information to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

เครื่องมือแพทย์ · 2023年11月22日 上午8:51

… [Trackback]

[…] Read More Info here to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ควบคุมน้ำหนัก · 2023年11月22日 上午9:20

… [Trackback]

[…] Read More here to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

buy custom cornhole board skins online · 2023年11月23日 上午5:31

… [Trackback]

[…] Info on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

Seal Online · 2023年11月23日 上午8:12

… [Trackback]

[…] Information on that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

ทำความรู้จักกับ SPADEGAMING สล็อตแตกง่าย · 2023年11月24日 上午7:26

… [Trackback]

[…] Read More Info here to that Topic: hugr.cn/2019/12/28/mybatis与传统jdbc和hibernate的比较/ […]

评论已关闭。