前言

小编在crud业务中会遇到case set的场景,

update `TD_XXX`
set
`status` = case `id` when 12 Then 1 when 13 Then 2 when 14 Then 1
end
where `id` in (12,13,14)

一般来说都是写在xml中,但是其实mybatis-plus也可以

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.1</version></dependency>

源码分析

此部分跳过,在mybatis-plus 自定义UpdateWrapper(一)实现列自增 已经有详细描述了

思路

此时应该将sql分开看得清楚些

SET `columns` = (CASE `caseColumns` WHEN caseMap.keys[0] THEN caseMap.values[0]END)

代码实现

/*** 根据传入map case update 最终实现如下效果* <p>*      SET `columns` = (*     CASE `caseColumns` WHEN caseMap.keys[0] THEN caseMap.values[0]*     WHEN caseMap.keys[1] THEN caseMap.values[1]*     WHEN caseMap.keys[2] THEN caseMap.values[2]*     END)* </p>*/public MyLambdaUpdateWrapper<T> caseSet(SFunction<T, ?> columns, Map<Object,Object> caseMap, SFunction<T, ?> caseColumns) {String columnsToString = super.columnToString(columns);List<Object> params = new ArrayList<>();StringBuilder stringBuilder = new StringBuilder();int paramIndex = 0;for (Object o : caseMap.keySet()) {stringBuilder.append(String.format("WHEN {%d} THEN {%d}", paramIndex++, paramIndex++)).append("\n");params.add(o);params.add(caseMap.get(o));}String caseSqlFormat = String.format("(case %s %s end)", super.columnToString(caseColumns), stringBuilder.toString());String format = String.format("%s =  %s", columnsToString, formatSql(caseSqlFormat, params.toArray(new Object[0])));setSql(format);return this;}

mybatis-plus 自定义UpdateWrapper(二)实现列的case set相关推荐

  1. 学习Spring Boot:(十二)Mybatis 中自定义枚举转换器

    前言 在 Spring Boot 中使用 Mybatis 中遇到了字段为枚举类型,数据库存储的是枚举的值,发现它不能自动装载. 解决 内置枚举转换器 MyBatis内置了两个枚举转换器分别是:org. ...

  2. (转)MyBatis框架的学习(二)——MyBatis架构与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图:  下面作简要概述: ...

  3. springboot+mybatis集成自定义缓存ehcache用法笔记

    今天小编给大家整理了springboot+mybatis集成自定义缓存ehcache用法笔记,希望对大家能有所办帮助! 一.ehcache介绍 EhCache 是一个纯Java的进程内缓存管理框架,属 ...

  4. [mybatis]select_resultMap_自定义结果集映射规则

    resultMap 自定义某个javaBean的封装规则 type:自定义规则的Java类型 id:唯一id方便引用 指定主键列的封装规则 id:定义主键底层会有优化 column:指定哪一列 pro ...

  5. mybatis源码阅读(二):mybatis初始化上

    转载自  mybatis源码阅读(二):mybatis初始化上 1.初始化入口 //Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与 ...

  6. oracle typehandler,Mybatis实现自定义的类型转换器TypeHandler

    此文其实是java操作Oracle类型XMLType总结二:使用Mybatis附带的一篇小结. Mybatis实现自定义的转换器,十分的简单,其主要步骤分为三步,这里以操作XMLType类型为例. 第 ...

  7. mybatis generator自定义逆向工程防覆盖sql代码

    Mybatis generator 自定义逆向工程防覆盖sql 在项目中常常有数据库的变更,我们会常用到mybats generator逆向工程来为我们更新项目中的sql语句及entity实体,此时会 ...

  8. python使用matplotlib可视化subplots绘制子图、自定义几行几列子图,如果M行N列,那么最终包含M*N个子图、在指定的子图中添加可视化结果

    python使用matplotlib可视化subplots绘制子图.自定义几行几列子图,如果M行N列,那么最终包含M*N个子图.在指定的子图中添加可视化结果 目录

  9. pandas自定义设置dataframe每个索引的标签、自定义设置索引的列名称(customize index name and index label)

    pandas自定义设置dataframe每个索引的标签.自定义设置索引的列名称(customize index name and index label) 目录

  10. mybatis 思维导图,让 mybatis 不再难懂(二)

    上一篇文章写了mybatis的基本原理和配置文件的基本使用,这一篇写mybatis的使用,主要包括与sping集成.动态sql.还有mapper的xml文件一下复杂配置等.值得注意的是,导图17和18 ...

最新文章

  1. python科学计算基础教程pdf下载-用Python做科学计算 高清晰PDF
  2. 图像特征提取:图像的矩特征
  3. Linux环境下静态库的生成和使用 (.a文件)
  4. add-apt-repository:找不到命令_嵌入式开发之交叉编译程序万能命令_以freetype为例...
  5. 《JavaScript 高级程序设计》笔记 第7章及以后
  6. JavaScript获取当前月的第一天和最后一天日期
  7. 好用的HTML文本编辑器BBEdit for Mac
  8. AOJ-759 会绕圈的数
  9. consul服务发现与注册于配置 (mac版为例)
  10. jquery on() 转
  11. Centos 7.0 的svn
  12. 会议管理系统java_javaweb会议管理系统
  13. 杭州滨江不久将不复存在,新杭州主城8区规划调整出炉!
  14. el-table使用span-method合并行
  15. 工业设备软件的研发测试
  16. 学习型通用红外遥控设备(一)
  17. 用命令备份与还原网络设置
  18. TResNet学习笔记 --- TResNet: High Performance GPU-Dedicated Architecture
  19. 帆软大屏背景怎么设置_FineReport报表工具增加动态背景色
  20. 人类活动识别---数据集UCI-HAR简介

热门文章

  1. 怎么批量调色_100款一键批量商业影楼修图调色PS动作,让你成为P图高手!!
  2. PySpark: DataProcessing(csv file)
  3. Google Cloud 虚拟机 Virtual Machines
  4. 容器技术Docker K8s 53 边缘容器服务(ACK@Edge)-阿里云边缘容器服务
  5. AWS DeepRacer ROS 架构 模拟环境和真实赛道的区别
  6. 机器学习- 吴恩达Andrew Ng Week8 知识总结 Dimensionality Reduction
  7. linux部署was找不到8879端口,WAS8.0与IHS集群安装与配置指导手册
  8. 会话推荐和 序列推荐
  9. python安装graphviz和pydotplus
  10. 使用winedt写论文遇到的一些小问题