博客
关于我
第 3 章 MybatisPlus 注入 SQL 原理分析
阅读量:156 次
发布时间:2019-02-28

本文共 1901 字,大约阅读时间需要 6 分钟。

MybatisPlus SQL注入原理分析

MybatisPlus是一种基于Java的动态SQL框架,它能够通过注解或配置文件自动为Mapper接口的CRUD方法注入对应的SQL语句。以下是其注入SQL语句的核心原理和实现机制。

核心类解析

1. Configuration(全局配置)

MybatisPlus的全局配置存储了数据库连接信息和框架设置,包括环境、数据库ID、连接超时、语句类型等。这些配置在整个应用中被共享和使用。

2. MappedStatement(SQL语句映射)

MappedStatement对象描述了Mapper接口方法对应的SQL语句,包含以下字段:

  • resource:对应的XML文件或资源路径。
  • configuration:全局配置对象。
  • id:SQL语句的唯一标识符。
  • fetchSize:默认结果集大小。
  • timeout:默认查询超时时间。
  • statementType:SQL语句类型(如prepared)。
  • sqlSource:存储SQL语句的资源,分为StaticSqlSource和DynamicSqlSource。

3. SqlMethod(SQL操作类型)

SqlMethod是一个枚举类,定义了MybatisPlus支持的SQL操作类型及其对应的SQL模板。例如,INSERT_ONE对应插入一条数据,DELETE_BY_ID对应删除一条记录。

4. TableInfo(表信息)

TableInfo类用于获取数据库表的元信息,包括表名、主键信息、字段信息等。它帮助MybatisPlus自动获取表结构信息,用于动态SQL的字段映射。

5. SqlSource(SQL源)

SqlSource分为StaticSqlSource和DynamicSqlSource。StaticSqlSource用于存储预先确定的静态SQL语句,DynamicSqlSource用于动态拼接SQL语句,适用于条件构造器。

6. SqlNode(SQL节点)

SqlNode是动态SQL语句的构建单元,支持多种节点类型,如IfSqlNode(条件语句)、StaticTextSqlNode(静态文本节点)等。这些节点通过拼接构建完整的动态SQL语句。

7. MapperBuilderAssistant(构建助手)

MapperBuilderAssistant负责缓存、SQL参数和结果集的处理。它通过addMappedStatement方法构建MappedStatement对象,并将其添加到全局配置中的mappedStatements集合中。

8. AbstractMethod(抽象方法)

AbstractMethod是一个抽象父类,用于注入SQL语句。它定义了一系列方法,如addSelectMappedStatementForTable和addSelectMappedStatementForOther,用于根据表信息或其他条件构造MappedStatement。子类如SelectById、SelectCount等会重写这些方法,构造具体的SQL语句。

9. AbstractSqlInjector(SQL注入器)

AbstractSqlInjector是注入SQL语句的核心类。它通过inspectInject方法遍历Mapper接口的方法,调用相应的注入器(如DefaultSqlInjector)来注入具体的SQL语句。

注入SQL的实现流程

  • Mapper接口定义:开发者在Mapper接口中定义CRUD方法,注解或配置SQL语句。
  • 注入器初始化:通过AbstractSqlInjector遍历Mapper接口,获取所有需要注入的方法。
  • 构造SQL语句:根据SqlMethod定义的模板,结合表信息和其他条件,构造具体的SQL语句。
  • 注册SQL映射:将构造好的MappedStatement对象添加到全局配置中,完成SQL语句的注册。
  • 动态SQL的实现

    动态SQL通过SqlNode构造节点,根据条件动态拼接SQL语句。例如,IfSqlNode处理条件语句,StaticTextSqlNode处理静态文本节点。这些节点通过apply方法在上下文中动态拼接,生成最终的动态SQL。

    总结

    MybatisPlus通过全局配置、SQL语句映射、动态SQL构造等机制,实现了对Mapper接口方法的SQL注入。其注入流程涵盖了从配置读取、SQL语句构造、注册到全局配置的完整过程。通过动态SQL技术,MybatisPlus能够灵活处理复杂的查询逻辑,提高开发效率。

    转载地址:http://hlfc.baihongyu.com/

    你可能感兴趣的文章
    perl学习之内置变量
    查看>>
    perl正则表达式中的常用模式
    查看>>
    Perl的基本語法
    查看>>
    perl输出中文有乱码
    查看>>
    Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password). 大数据ssh权限问题 hadoop起不来 hadoopssh错
    查看>>
    PermissionError:Python 中的 [Errno 13]
    查看>>
    PermissionError:[Errno 13] 权限被拒绝:‘/manage.py‘
    查看>>
    Permutation
    查看>>
    perspective意思_2020年12月英语四级词汇讲解丨考点归纳:perspective
    查看>>
    PE文件,节头有感IMAGE_SECTION_HEADER
    查看>>
    PE查找文件偏移地址
    查看>>
    PE知识复习之PE的导入表
    查看>>
    PFX(Parallel Framework) and Traditional Multithreading
    查看>>
    PGOS:今天动手给电脑装青苹果Win7 X64位系统
    查看>>
    pgpool-II3.1 的内存泄漏(一)
    查看>>
    PgSQL · 特性分析 · PG主备流复制机制
    查看>>
    PGSQL主键序列
    查看>>
    PGSQL安装PostGIS扩展模块
    查看>>
    pg数据库中两个字段相除
    查看>>
    PhalApi:[1.23] 请求和响应:GET和POST两者皆可得及超越JSON格式返回
    查看>>