文档章节

MyBatis整合Spring的实现(14)

tara_qri
 tara_qri
发布于 2015/10/29 18:28
字数 339
阅读 93
收藏 4

本章中分析delete元素的解析。

1 配置文件

<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
    <!--
      WARNING - @mbggenerated
      This element is automatically generated by MyBatis Generator, do not modify.
      This element was generated on Fri Aug 14 16:08:36 CST 2015.
    -->
    delete from tb_menu
    where Id = #{id,jdbcType=INTEGER}
</delete>

2 方法parseStatementNode

public void parseStatementNode() {
    // deleteByPrimaryKey
    String id = context.getStringAttribute("id");
    // null
    String databaseId = context.getStringAttribute("databaseId");
    // 第一次检查这里是不通过的,直接跳过
    if (!databaseIdMatchesCurrent(id, databaseId, this.requiredDatabaseId)) return;
    // null 
    Integer fetchSize = context.getIntAttribute("fetchSize");
    // null
    Integer timeout = context.getIntAttribute("timeout");
    // null
    String parameterMap = context.getStringAttribute("parameterMap");
    // java.lang.Integer
    String parameterType = context.getStringAttribute("parameterType");
    // class java.lang.Integer
    Class<?> parameterTypeClass = resolveClass(parameterType);
    // null
    String resultMap = context.getStringAttribute("resultMap");
    // null
    String resultType = context.getStringAttribute("resultType");
    // null
    String lang = context.getStringAttribute("lang");
    // 获取默认的处理对象
    // org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
    LanguageDriver langDriver = getLanguageDriver(lang);
    // null
    Class<?> resultTypeClass = resolveClass(resultType);
    // null
    String resultSetType = context.getStringAttribute("resultSetType");
    // PREPARED
    StatementType statementType = StatementType.valueOf(context.getStringAttribute("statementType", StatementType.PREPARED.toString()));
    ResultSetType resultSetTypeEnum = resolveResultSetType(resultSetType);

    // delete
    String nodeName = context.getNode().getNodeName();
    // DELETE
    SqlCommandType sqlCommandType = SqlCommandType.valueOf(nodeName.toUpperCase(Locale.ENGLISH));
    // false
    boolean isSelect = sqlCommandType == SqlCommandType.SELECT;
    // true
    boolean flushCache = context.getBooleanAttribute("flushCache", !isSelect);
    // false
    boolean useCache = context.getBooleanAttribute("useCache", isSelect);
    // false
    boolean resultOrdered = context.getBooleanAttribute("resultOrdered", false);

    // Include Fragments before parsing
    XMLIncludeTransformer includeParser = new XMLIncludeTransformer(configuration, builderAssistant);
    // 解析<include refid="Base_Column_List" />
    includeParser.applyIncludes(context.getNode());

    // Parse selectKey after includes and remove them.
    processSelectKeyNodes(id, parameterTypeClass, langDriver);
    
    // 这里很明显也是静态SQL
    // org.apache.ibatis.builder.StaticSqlSource
    SqlSource sqlSource = langDriver.createSqlSource(configuration, context, parameterTypeClass);
    // null
    String resultSets = context.getStringAttribute("resultSets");
    // null
    String keyProperty = context.getStringAttribute("keyProperty");
    // null
    String keyColumn = context.getStringAttribute("keyColumn");
    // org.apache.ibatis.executor.keygen.NoKeyGenerator
    KeyGenerator keyGenerator;
    // deleteByPrimaryKey!selectKey
    String keyStatementId = id + SelectKeyGenerator.SELECT_KEY_SUFFIX;
    keyStatementId = builderAssistant.applyCurrentNamespace(keyStatementId, true);
    if (configuration.hasKeyGenerator(keyStatementId)) {
      keyGenerator = configuration.getKeyGenerator(keyStatementId);
    } else {
      keyGenerator = context.getBooleanAttribute("useGeneratedKeys",
          configuration.isUseGeneratedKeys() && SqlCommandType.INSERT.equals(sqlCommandType))
          ? new Jdbc3KeyGenerator() : new NoKeyGenerator();
    }

    builderAssistant.addMappedStatement(id, sqlSource, statementType, sqlCommandType,
        fetchSize, timeout, parameterMap, parameterTypeClass, resultMap, resultTypeClass,
        resultSetTypeEnum, flushCache, useCache, resultOrdered, 
        keyGenerator, keyProperty, keyColumn, databaseId, langDriver, resultSets);
  }

deleteByPrimaryKey最终的MappedStatement

© 著作权归作者所有

tara_qri
粉丝 10
博文 48
码字总数 21496
作品 1
海淀
私信 提问
Spring Boot 整合 MyBatis

最近项目原因可能会继续开始使用MyBatis,已经习惯于spring-data的风格,再回头看xml的映射配置总觉得不是特别舒服,接口定义与映射离散在不同文件中,使得阅读起来并不是特别方便。 Spring...

中关村的老男孩
06/24
67
0
Spring与MyBatis整合

序言 在MyBatis学习中,我们会发现很多重复性的代码,例如: //创建连接 private SqlSessionFactory sqlSessionFactory = SessionFactoryUtils .getSessionfactory().getSqlSessionFactory(......

开源俱乐部
2014/07/09
446
0
ZHENFENGSHISAN/perfect-ssm

Quick Start 项目简介 ssm系列 ssm-demo:Spring+SpringMVC+Mybatis+easyUI整合 perfect-ssm:RESTful API+redis缓存 ssm-cluster:前后端分离+集群部署 ssm-dubbo:dubbo服务化 ssm-micro-se......

ZHENFENGSHISAN
2017/09/18
0
0
spring中的mybatis(1)

开门见山 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="cl......

hyssop
2015/10/29
113
0
springmvc 项目完整示例04 整合mybatis mybatis所需要的jar包 mybatis配置文件 sql语句 mybatis应用

百度百科: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 iBATIS一词来源于“...

noteless
2016/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部