我这遇到个问题,如果 type字段为null则查询type is null,否则查对应的值

询问 AI 得知,可以用choose-when-otherwise

<select>
select * from user
<where>
<choose>
<when test="type != null">and type = #{type}</when>
<otherwise>and type is null</otherwise>
</choose>
</where>
</select>

AI 给出的例子,登录账户时使用username 或者email 或者 手机号

<select id="selectUser" parameterType="map" resultType="com.example.User">
SELECT * FROM users
WHERE
<choose>
<when test="username != null and username != ''">
username = #{username}
</when>
<when test="phone != null and phone != ''">
phone = #{phone}
</when>
<otherwise>
email = #{email}
</otherwise>
</choose>
</select>

似乎when可以有很多个并排,但是我没有测试



这是mybatis官方的例子,官网把choose-when-otherwise比作Java的switch-case语句

Sometimes we don’t want all of the conditionals to apply, instead we want to choose only one case among many options. Similar to a switch statement in Java, MyBatis offers a choose element.

Let’s use the example above, but now let’s search only on title if one is provided, then only by author if one is provided. If neither is provided, let’s only return featured blogs (perhaps a strategically list selected by administrators, instead of returning a huge meaningless list of random blogs).

<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>

突然发现我那个也可以改成

<if test="type == null"> and type is null</if>
<if test="type != null and type != ''"> and type = #{type}</if>

Mybatis 没有if-else,只有if

Mybatis中的 switch的更多相关文章

  1. mybatis中的动态SQL

    在实际开发中,数据库的查询很难一蹴而就,我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时,mybatis给我们提供了动态SQL,可以让我们根据具体 ...

  2. mybatis中resultMap配置细则

    resultMap算是mybatis映射器中最复杂的一个节点了,能够配置的属性较多,我们在mybatis映射器配置细则这篇博客中已经简单介绍过resultMap的配置了,当时我们介绍了resultMa ...

  3. MyBatis中Mapper的返回值类型

    insert.update.delete语句的返回值类型 对数据库执行修改操作时,数据库会返回受影响的行数. 在MyBatis(使用版本3.4.6,早期版本不支持)中insert.update.del ...

  4. mybatis中的.xml文件总结——mybatis的动态sql

    resultMap resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可映射成功. 如果sql查询字段名和pojo的属性名不一致,可以通过re ...

  5. Mybatis中动态SQL多条件查询

    Mybatis中动态SQL多条件查询 mybatis中用于实现动态SQL的元素有: if:用if实现条件的选择,用于定义where的字句的条件. choose(when otherwise)相当于Ja ...

  6. MyBatis中动态SQL语句完成多条件查询

    一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...

  7. Mybatis中resultMap的基础配置

    一.概述 resultMap 元素是 MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果集中取出数据的 JDBC 代码的那个东西,而且在一些情形下允许你做一些 JDBC 不支持的 ...

  8. ResultMap和ResultType在使用中的区别、MyBatis中Mapper的返回值类型

    在使用mybatis进行数据库连接操作时对于SQL语句返回结果的处理通常有两种方式,一种就是resultType另一种就是resultMap,下面说下我对这两者的认识和理解 resultType:当使 ...

  9. mybatis中的动态SQL(IF Chooes When Where Set ForEach SQL片段)

    mapper: public interface BlogMapper { List<Blog> getBlogByIF(Map map); } IF <select id=&quo ...

  10. Mybatis中进行批量更新(updateBatch)

    更新多条数据,每条数据都不一样 背景描述:通常如果需要一次更新多条数据有两个方式,(1)在业务代码中循环遍历逐条更新.(2)一次性更新所有数据(更准确的说是一条sql语句来更新所有数据,逐条更新的操作 ...

随机推荐

  1. 获取n级父目录名称

    DirectoryInfo GetPrant(DirectoryInfo path, int level) { DirectoryInfo temp = null; if (level > 1) ...

  2. 知乎 微软当年的 J++ 究竟是什么?为什么 Sun 要告它? zz

    https://www.zhihu.com/question/22814456 考个古

  3. 架构发展趋势以及 d2js 的未来

    目前架构有几个热点方向:微服务, dubbo, Faas,还有 TiDB. 现在开发模式是前后端分离基本成为行规. 应该说以大部分企业业务量级.人员规模来说,要去和淘宝等大厂去对标是非常傻的.对大部分 ...

  4. 迁移现有用户数据到ABP vNext

    前言 使用 ABP vNext(下文简称 ABP)时,通常都是从 cli 开始新建模板,从一个空项目开始.对已经存续的项目来说,现有的数据,特别是用户等核心数据需要进行迁移. 老的项目,随着规模越来越 ...

  5. Python中指数概率分布函数的绘图详解

    在数据科学和统计学中,指数分布是一种应用广泛的连续概率分布,通常用于建模独立随机事件发生的时间间隔.通过Python,我们可以方便地计算和绘制指数分布的概率密度函数(PDF).本文将详细介绍指数分布的 ...

  6. 实践解决:IDEA2022版本创建Maven项目时没有出现src目录

    问题:IDEA创建Maven项目时没有出现src目录 创建Maven项目 新版本的IDEA创建是选用的是Maven Archetype,选择这个也是和Maven一样的.按照这样流程创建完成之后的的架构 ...

  7. 这可能是国内Qt/C++界最受欢迎开源项目之一/5.8Kstar/持续迭代更新

    一.前言 本项目大概在2020年开始的,大概在2022年重写了一遍,主要是分门别类存放.本项目主要是QWidget编写的一些开源的demo,支持Qt4.Qt5.Qt6,支持任意系统,预计会有100多个 ...

  8. JavaWeb代码架构中类之间的引用关系

    为了加深对Java Web代码架构中类之间的引用关系的理解和记忆,特绘制了这一张图. Java EE应用架构:

  9. Java 中toString方法在枚举中的应用:展示枚举字段信息

    在Java编程中,枚举(enum)是一种特殊的数据类型,它允许程序员定义一组固定的常量.枚举类型在Java中非常有用,尤其是在需要表示一组固定选项(如星期.月份.方向等)时.尽管枚举类型在定义时看起来 ...

  10. Java方法引用、lambda如何序列化&方法引用与lambda底层原理

    系列文章目录和关于我 0.引入 最近笔者使用flink实现一些实时数据清洗(从kafka清洗数据写入到clickhouse)的功能,在编写flink作业后进行上传,发现运行的时候抛出:java.io. ...