前言

上文Mybatis之方法如何映射到XML中介绍了Mybatis是如何将方法进行分拆出方法名映射到statementID,参数如何解析成xml中sql所需要的,以及返回类型的处理;本文将从XML端来看是如何同方法端进行映射的。

XML映射类

前两篇文章中了解到通过Mapper类路径+方法名映射xxMapper.xml中的namespace+statementID,而namespace+statementID块其实在初始化的时候在Configuration中保存在MappedStatement中,所以我们在增删改查的时候都会看到如下代码:

MappedStatement ms = configuration.getMappedStatement(statement);

在Configuration中获取指定namespace+statementID的MappedStatement,而在Configuration是通过Map维护了对应关系;已最常见的Select语句块为例,在XML中的配置的结构如下:

其他增删改除了个别的几个关键字比如:keyProperty,keyColumn等,其他和select标签类似;再来看一下MappedStatement类中相关的属性:

public final class MappedStatement { private String resource; private Configuration configuration; private String id; private Integer fetchSize; private Integer timeout; private StatementType statementType; private ResultSetType resultSetType; private SqlSource sqlSource; private Cache cache; private ParameterMap parameterMap; private List resultMaps; private boolean flushCacheRequired; private boolean useCache; private boolean resultOrdered; private SqlCommandType sqlCommandType; private KeyGenerator keyGenerator; private String[] keyProperties; private String[] keyColumns; private boolean hasNestedResultMaps; private String databaseId; private Log statementLog; private LanguageDriver lang; private String[] resultSets; ...省略...}

select标签里面的关键字基本可以在类MappedStatement中找到对应的属性,关于每个属性代表的含义可以参考官方文档:https://mybatis.org/mybatis-3/sqlmap-xml.html;除了关键字还有sql语句,对应的是MappedStatement中的SqlSource,sql语句有动态和静态的区别,对应的SqlSource也提供了相关的子类:StaticSqlSource和DynamicSqlSource,相关的sql解析类在XMLScriptBuilder中:

public SqlSource parseScriptNode() { MixedSqlNode rootSqlNode = parseDynamicTags(context); SqlSource sqlSource = null; if (isDynamic) { sqlSource = new DynamicSqlSource(configuration, rootSqlNode); } else { sqlSource = new RawSqlSource(configuration, rootSqlNode, parameterType); } return sqlSource; }

具体哪种sql是动态的,哪种是静态的,相关逻辑在parseDynamicTags中判断的,此处大致说一下其中的原理:遇到${}和动态标签如,,则为DynamicSqlSource,否则为StaticSqlSource也就是常见的#{};在解析动态sql的时候Mybatis为每个标签专门提供了处理类NodeHandler,初始化信息如下:

private void initNodeHandlerMap() { nodeHandlerMap.put("trim

xml gridview控件增删改查_Mybatis之XML如何映射到方法相关推荐

  1. php xml 增删改查,PHP实现对xml进行简单的增删改查(CRUD)操作示例

    本文实例讲述了PHP实现对xml进行简单的增删改查(CRUD)操作.分享给大家供大家参考,具体如下: 假如有下面xml文件: 55.8 56 40 339 如何使用php对它进行CRUD?其实像这种简 ...

  2. java jdom进行xml的增删改差_java使用DOM对XML文档进行增删改查操作实例代码

    本文研究的主要是java使用DOM对XML文档进行增删改查操作的相关代码,具体实例如下所示. 源代码: package com.zc.homeWork18; import java.io.File; ...

  3. ExtJS EditorGridPanel 示例之xml格式Store前后台增删改查

    程序入口html页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  4. JAVA 通讯录 —— 实现对XML文件数据的增删改查

    心血来潮,带着好奇写了人生中第一篇博客,哈哈哈哈 ~ 嗝 ~ ~   这篇文章主要就是分享自己做的一次项目作业,一是为了分享,二是用另外一种方式保存自己的代码 嘻嘻嘻 ~.还是个编程萌新,所以有啥写的 ...

  5. XML基本概念及增删改查操作

    一.概念及特征: 1. XML 指可扩展标记语言(Extensible Markup Language),用户可以自己定义标签.XML 被设计用来传输和存储数据,而 HTML 用于格式化并显示数据,并 ...

  6. GridView控件RowDataBound事件中获取列字段的几种方法(转)

    GridView是ASP.NET中功能强大的数据显示控件,它的RowDataBound事件为我们提供了方便的控制行.列数据的途径. 软件开发网 www.mscto.com 要获取当前行的某个数据列,有 ...

  7. ssm使用全注解实现增删改查案例——web.xml

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" ...

  8. ssm使用全注解实现增删改查案例——mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC & ...

  9. ssm使用全注解实现增删改查案例——applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

最新文章

  1. c#调用c++(Opencv)dll的实例
  2. 20172315 2018-2019-1《程序设计与数据结构》课程总结
  3. 腾讯滑块验证码识别和加速度模拟(1)
  4. is this mysql server_mysql出现is not allowed to connect to this mysql server异常的解决办法
  5. ConcurrentHashMap源码分析(保姆式讲解):Put、扩容原理详解 博主可答疑
  6. c语言数组用户注册登入管理系统_[内附完整源码和文档] 基于JAVA的干部档案管理系统...
  7. 浙江富商的24条至理经验
  8. 学习笔记(01):2020软考网络工程师--基础知识视频教程-计算机硬件基础(一)
  9. 史上最全的PS快捷键大全
  10. 两台电脑间使用网线连接实现共享
  11. 【ybt高效进阶1-5-2】【luogu P3456】山峰和山谷 / GRZ-Ridges and Valleys
  12. pl/sql模拟登录并获取Oracle ebs职责
  13. coreldraw x4如何出血_coreldraw x4教程
  14. Python对列表去重的多种方法(四种方法)
  15. 鲲鹏系列服务器,鲲鹏系列云服务器
  16. 借助“商业模式画布”探索产品的用户需求与价值主张
  17. 用 Java 实现贪吃蛇小游戏
  18. kafka 和其他 MQ 之间的区别
  19. Cty的Linux学习笔记(十二)
  20. 计算机科学投稿初审被增刊,科学网—投稿过程中的困惑:增刊 - 张晓锋的博文...

热门文章

  1. 动态内表 动态ALV显示
  2. 检查用户是否有权限从ABAP里调用C kernel functions
  3. 2020年全国压岁钱榜单出炉,今年小朋友压岁钱归谁?
  4. 千亿化妆品市场规模背后,女人正在失去不化妆的权利
  5. 亮眼的财报遇到疫情,阿里的生意会好做吗?
  6. 将矩阵转为一行_LeetCode1253:矩阵重构
  7. 超出网络bios会话限制_什么是UEFI,它和BIOS有什么不同?
  8. 中单引号和双引号的区别与联系_VB中Sub与function的联系与区别
  9. 键盘和计算机之间的通信是单工通信,通信方式
  10. Python3各种进制之间的转换方法