博客
关于我
第 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/

    你可能感兴趣的文章
    memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
    查看>>
    Memcached:Node.js 高性能缓存解决方案
    查看>>
    memcache、redis原理对比
    查看>>
    memset初始化高维数组为-1/0
    查看>>
    Metasploit CGI网关接口渗透测试实战
    查看>>
    Metasploit Web服务器渗透测试实战
    查看>>
    Moment.js常见用法总结
    查看>>
    MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
    查看>>
    MongoDB学习笔记(8)--索引及优化索引
    查看>>
    ms sql server 2008 sp2更新异常
    查看>>
    MS UC 2013-0-Prepare Tool
    查看>>
    msbuild发布web应用程序
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    msf
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>