在Java应用程序的开发中,选择合适的数据库持久层框架至关重要。一个明智的选择可以帮助开发人员更好地管理数据库交互、提高性能和简化开发工作。
(一)为什么要选MyBatis
JDBC | Hibernate / JPA | MyBatis |
---|---|---|
简单直接 | ORM | 轻量+动态SQL+关联查询 |
开发效率低 | 屏蔽底层数据库差异 | 国内生态 |
重复冗余 | 关联查询、动态SQL不友好 | 不能屏蔽数据库差异 |
在以前是直接用JDBC进行数据库查询,优点是简单直接,缺点是开发效率低。用JDBC写程序,需要大量手工写代码,
代码重复率较高,后来逐渐演化出ORM框架。
ORM框架最早期有Hibernate以及JPA规范,Hibernate能够屏蔽底层数据库差异,自动根据SQL语言生成对应底层不
同数据库的方言,缺点是对关联查询支持与动态SQL能力不太友好,很难写出高效SQL。
国内目前流行的是轻量级MyBatis,对动态SQL以及关联查询的支持性较高,缺点是因为它绑定一个DB,手写SQL还要
动态拼接,很难从一个DB自由的切换到另外一个DB,但由于平时很少切换DB,因此问题不是很大。
(二)MyBatis基本概念介绍
MyBatis主要分为三层:接口层,核心层与基础层。
1.接口层
是通过提供的API作为数据库进行增/删/改/查,都是MyBatis的API。
2.核心层
是SQL预处理、SQL执行、结果映射。
1)SQL预处理:是对代码里的变量进行绑定,以及动态SQL生成;
2)SQL执行:是把生成好的SQL,通过JDBC驱动,传到对应的DB里执行,而且要负责网络通信的部分;
3)结果映射:是把数据库返回的结果从关系型数据转换成Java对象数据。
3.基础层
包括日志、事务管理、缓存、连接池、动态代理、配置解析。
1)日志:是做框架里面的日志输出以及SQL语句输出;
2)事务管理:是对 JDBC事物、数据库事物做管理;
3)缓存:能够把结果集缓存在JVM的内存内部。优点是比较快,缺点是会占用堆内存。有条件的情况下,建议用户多
使用分布式缓存;
4)连接池:能够加速查询,提高性能;
5)动态代理:在用MyBatis编程时,核心是通过接口执行数据库查询。而Mapper接口本身是没有实现的,通过注解
或者XML配置SQL语句,动态代理会在运行时生成代理,当调用Mapper接口时,转换成实际的SQL语句;
解
或者XML配置SQL语句,动态代理会在运行时生成代理,当调用Mapper接口时,转换成实际的SQL语句;
6)配置解析:因为MyBatis里面有存在大量配置,需要配置新模块,读取XML配置,并把它映射为配置属性。
参考:https://developer.aliyun.com/ebook/450?spm=a2c6h.20345107.ebook-index.28.6eb21f54J7SUYc