Mybatis-plus做了什么

Mybatis-plus做了什么

合集总览:Mybatis框架梳理

聊一下mybatis-plus。你是否有过疑问,Mybatis-plus中BaseMapper方法对应的SQL在哪里?它为啥会被越来越多人接受。在Mybatis已经足够灵活的情况下,它又做了什么事情。

Mybatis回顾

回顾Mybatis,它帮我们做了javaType和jdbcType之间的转换,让我们很容易的实现数据库和java对象之间的转换。同时将java代码和SQL分离,通过xml集中管理SQL,然后通过代理的方式完成接口和xml之间的映射绑定。

相比较之间的JDBC开发,已经简化了开发流程。但在使用的过程中,痛点也逐渐暴露出来。

以前的方案

在Mybatis的使用过程中,单表的CRUD仍然需要在xml文件中定义,简言之就是Mybatis规范了mapper接口和mapper.xml之间的映射关系。不知道有没有小伙伴还记得,那时候为了满足这一限制,很多公司框架使用代码生成器对单表的CRUD进行模版定义,然后在xml文件中自动生成SQL片段。通过Mybatis提供的动态SQL特性,在xml中生成多个if片段,实现多条件的查询。类似这种:

xml 复制代码
// 自动生成的模版代码
<sql id="DefColumnList" >
   <trim suffixOverrides=",">
      t.RECORD_ID,
       t.BATCH_CODE,
       t.CONSUME_FLAG,
       t.CONSUME_TYPE
       ...
   </trim>
 </sql>
 <sql id="DefWhereClause" >
    <trim prefix="WHERE" prefixOverrides="AND | OR">
      <if test="recordId != null" >
         AND  RECORD_ID = #{ recordId }
      </if>
      <if test="batchCode != null" >
         AND  BATCH_CODE = #{ batchCode }
      </if>
      ...
	</trim>    
</sql>

Mybatis-plus

我觉得Mybatis-plus巧妙的地方是,当大家把mapper接口mapper.xml一一对应当成铁律的时候,Mybatis-plus想到的是:mapper.xml不是Mybatis执行SQL时最终要用的东西,在Mybatis中,执行SQL要用的是MappedStatementmapper.xml只是定义SQL的图纸。对于基础的CRUD,既然可以通过java反射在xml文件中创建出对应的SQL模版,那么为什么不直接创建对应的MappedStatement呢?
Mybatis启动时会加载解析mapper.xml,将解析的<select>``<insert>等标签构建为MappedStatement,最终由mapper接口调用处理器调用。那么干脆在加载时直接通过解析对象和接口,创建所需的MappedStatement(BaseMapper中定义的接口方法),这样就不用在xml中定义了。

java 复制代码
/**
 * SQL 自动注入器
 */
public abstract class AbstractSqlInjector implements ISqlInjector {
	// 加载时检查BaseMapper中定义的方法是否注入
	public void inspectInject(){}
}

BaseMapper中定义的常用方法:

看到这里,希望你能明白Mybatis-plus中BaseMapper方法在没有定义xml的情况下如何执行这个问题。

相关推荐
烛影摇红透纱窗29 分钟前
ForkJoinPool 与工作窃取
java
浩瀚地学1 小时前
【面试算法笔记】0302-哈希表-哈希表实现
java·经验分享·笔记·算法·面试
AC赳赳老秦1 小时前
时间开销自动统计:OpenClaw 记录工作任务时长、分析时间分配、给出优化建议
java·大数据·开发语言·python·自动化·deepseek·openclaw
名侦探7221 小时前
构建 Agent 的五大难点与解决方案
java·大数据·人工智能
Demons_kirit2 小时前
图库原理(以阿里云OSS为案例)
java·阿里云·云计算
SimonKing2 小时前
那个号称"对标 Spring"的国产框架 Solon,到底行不行?
java·后端·程序员
Lethehong2 小时前
飞算Java:从需求梳理到风险闭环,搭建云盾企业信息安全与权限管理平台
java·开发语言
霸道流氓气质2 小时前
SpringBoot中使用字典驱动的动态路由示例
java·spring boot·后端
学计算机的计算基2 小时前
操作系统八股文:进程与线程全面梳理(附调度算法+IPC+锁机制)
java·算法
wuqingshun3141592 小时前
请描述简单工厂模式的工作原理
java·简单工厂模式