一、if:你们能判断,我也能判断!

<select id="count" resultType="java.lang.Integer">select count(*) from user where <if test="id != null">id = #{id}</if> and username = 'xiaoming'
</select>
  • 如果传入的 id 不为 null, 那么才会 SQL 才会拼接 id = #{id}
  • 如果传入的 id 为 null,那么最终的 SQL 语句就变成了 select count(*) from user where and username = ‘xiaoming’。这语句就会有问题,这时候 where 标签就该隆重登场了

二、where:有了我,SQL 语句拼接条件神马的都是浮云!

<select id="count" resultType="java.lang.Integer">select count(*) from user<where><if test="id != null">id = #{id}</if>and username = 'xiaoming'</where></select>
  • where 元素只会在至少有一个子元素的条件返回 SQL 子句的情况下才去插入 WHERE 子句
  • 若语句的开头为 AND、OR,where 元素也会将它们去除。还可以通过 trim 标签去自定义这种处理规则

三、trim:我的地盘,我做主!

trim 标签一般用于拼接、去除 SQL 的前缀、后缀
trim 标签中的属性
属性 描述
prefix 拼接前缀
suffix 拼接后缀
prefixOverrides 去除前缀
suffixOverrides 去除后缀
<select id="count" result="java.lang.Integer">select count(*) from user<trim prefix ="where" prefixOverrides="and | or"><if test="id != null">id = #{id}</if><if test="username != null"> and username = #{username}</if></trim>
</select>
  • 如果 id 或者 username 有一个不为空,则在语句前加入 where。如果 where 后面紧随 and 或 or 就会自动会去除
  • 如果 id 或者 username 都为空,则不拼接任何东西

四、set: 信我,不出错!

<update id="UPDATE" parameterType="User">update user<set><if test="name != null">name = #{name},</if> <if test="password != null">password = #{password},</if> <if test="age != null">age = #{age},</if> </set>
</update>
  • 三个 if 至少有一个不为空。会在前面加上 set,自动去除尾部多余的逗号

五、foreach: 你有 for,我有 foreach

foreach 标签中的属性
属性 描述
index 下标
item 每个元素名称
open 该语句以什么开始
close 该语句以什么结尾
separator 在每次迭代之间以什么作为分隔符
collection 参数类型
collection:
  • 如果参数类型为 List,则该值为 list
<select id="count" resultType="java.lang.Integer">select count(*) from user where id in<foreach collection="list" item="item" index="index" open="(" separator="," close=")">#{item}</foreach>
</select>
  • 如果参数类型为数组,则该值为 array
<select id="count" resultType="java.lang.Integer">select * from user where id inarray<foreach collection="array" item="item" index="index" open="(" separator="," close=")">#{item}</foreach>
</select>
  • 如果参数类型为 Map,则参数类型为 Map 的 Key

六、choose: 我选择了你,你选择了我!

<select id="count" resultType="Blog">select count(*) from user<choose><when test="id != null">and id = #{id}</when><when test="username != null">and username = #{username}</when><otherwise>and age = 18</otherwise></choose>
</select>
  • 当 id 和 username 都不为空的时候, 那么选择二选一(前者优先)
  • 如果都为空,那么就选择 otherwise 中的
  • 如果 id 和 username 只有一个不为空,那么就选择不为空的那个

七、sql:相当于 Java 中的代码提重,需要配合 include 使用

<sql id="table"> user </sql>

八、include:相当于 Java 中的方法调用

<select id="count" resultType="java.lang.Integer">select count(*) from <include refid=“table(sql 标签中的 id 值)” />
</select>

九、bind:对数据进行再加工

<select id="count" resultType="java.lang.Integer">select count(*) from user<where><if test="name != null"><bind name="name" value="'%' + username + '%'"name = #{name}</if>
</select>

mybatis 九大动态标签详解相关推荐

  1. mybatis 动态标签详解

    if 标签 if标签中有一个test属性,test属性值是一个符合OGNL要求的判断表达式,表达式的结果可以使true或者false, 除此之外所有的非0值都为true (1).数字类型 1.1 例如 ...

  2. 前端基础-HTML的的标签详解

    阅读目录 一.head内常用标签 二. HTML语义化 三. 字符实体 四. h系列标签 五. p标签 六. img标签 七. a标签 八. 列表标签 九. table标签 十. form标签 一. ...

  3. W3C中meta标签详解

    2019独角兽企业重金招聘Python工程师标准>>> meta是html语言head区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的html代码: <meta ...

  4. C++静态库与动态库详解与使用

    福利 | 百度 AI 开发者大会免费门票领取    CSDN日报20170628--<实习,背后的选择?>    [直播]探究Linux的总线.设备.驱动模型! C++静态库与动态库详解与 ...

  5. HTML marquee标签详解

    HTML marquee标签详解 在论坛默认的编辑状态下,我们可以通过UBB语法的move和fly语句让对象动起来,但功能很简单,只是平行地移动.而我们使用HTML的Marquee语句则可以产生更多的 ...

  6. GC之7大垃圾收集器详解(上)

    GC之7大垃圾收集器详解 目录 GC之7大垃圾收集器概述 GC之Serial收集器 GC之ParNew收集器 GC之Parallel收集器 GC之ParallelOld收集器 GC之CMS收集器 GC ...

  7. Android 颜色渲染(九) PorterDuff及Xfermode详解

    Android 颜色渲染(九)  PorterDuff及Xfermode详解 之前已经讲过了除ComposeShader之外Shader的全部子类, 在讲ComposeShader(组合渲染)之前,  ...

  8. 大数据是什么和大数据技术十大核心原理详解

     一.数据核心原理   从"流程"核心转变为"数据"核心   大数据时代,计算模式也发生了转变,从"流程"核心转变为"数据&quo ...

  9. JSF标签详解(全)

    转自:https://wenku.baidu.com/view/82b84b255901020207409c87.html :https://blog.csdn.net/qq_36411874/art ...

最新文章

  1. Linux(CentOS6.5)中安装maven
  2. OpenWrt编程篇
  3. c语言入门经典案例,c语言入门经典案例及飞源代码.doc
  4. 单片机检测stc没反应_我为什么不用STC单片机
  5. mysql lib 5.5.28_mysql5.5.28在Linux下的安装
  6. opencv3.2.0 Cmake 3.8.0 + tdm-gcc-5.1.0-3 OpenThread
  7. win10好用的C语言软件,9款超级实用的Win10软件,一定要收藏,简直不要太好用
  8. ORA-01045: user lacks CREATE SESSION privilege; logon denied
  9. 基频和倍频的概念_基频峰,泛频峰,倍频峰,二倍频峰的区别
  10. 电脑 桌面图标上多了一个白色的文档图标 怎么去掉?
  11. LintCode 627.最长回文串
  12. 常用网络测试软件,常用的网络故障检测工具有哪些
  13. IP5306是一款2.1A 充电 2.4 A 放电高集成度移动电源 SOC
  14. python 操作redis之五(集合)
  15. mysql的设置参数中max_allowed_packet
  16. 测试人员在软件测试过程中的职责,到底哪些事情属于测试人员的职责?
  17. 15天深度复习JavaWeb的详细笔记(四)——HTML、CSS
  18. 《Adobe Audition CS6中文版经典教程》——2.2 Audition Workspace
  19. 大数据公司数据分析取数流程以及SQL示例
  20. 电力系统中的定值区是什么意思

热门文章

  1. 数量周期 复杂现象背后的推动力,可能是极其简单的原理。科学的目标之一就是发现纷 繁复杂的自然现象背后的简单法则。爱因斯坦的相对论是这方面的典范例证。
  2. HIT 软件构造 lab2
  3. mac 下安装brew
  4. MAC最详细配置rz/sz命令
  5. 大数据必学Java基础(一):Java体系结构、特性和优势
  6. 编译原理课堂笔记(1)编译概述
  7. 杨辉三角 (java语言)
  8. mysql语句distinct_MySQL DISTINCT语句
  9. Java开源生鲜电商平台-Java分布式以及负载均衡架构与设计详解(源码可下载)
  10. 执行python代码的方式_涨见识了,在终端执行 Python 代码的 6 种方式!