常见的动态标签

  1. if

  2. choose, when, otherwise

  3. trim,where,set

  4. foreach

  5. bind

  6. sql

    mybatis通过OGNL表达式来进行取值操作;比如:#{username}

Mybatis两个内置参数

  1. _parameter: 如果接口传入多个参数,这些参数都包含在这一个参数中,如果传入一个,那该参数就代表传来的参数

  2. _databaseId: 如果在mybatis核心配置文件中配置了databaseIdProvider(数据库厂商)标签,则该参数代表当前数据库厂商别名
    这两个参数可以搭配if标签来使用,

    <if text="_databaseId == 'mysql'">SELECT * FROM user<if text="_parameter != null">WHERE username = #{_parameter.属性名}</if>
    </if>
    

1. if使用

<!-- if -->
<if test="title != null">AND title like #{title}
</if>

2. choose使用

<!-- choose,when,otherwise -->
<choose><!-- 相当于if,else if,else--><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>

3. trim使用

<!-- trim -->
<!--
prefix: 给trim括起来的最前面添加指定的字符串,本例中添加WHERE;
prefixOverrides: 如果trim括起来的最前面出现指定的字符串,则将其删掉,本例中删掉AND或OR
suffix: 同prefix道理一样,只是变成了末尾
suffixOverrides: 同prefixOverrides道理一样,只是变成了末尾
这四个属性可以选用
-->
<trim prefix="WHERE" prefixOverrides="AND | OR" suffix="" suffixOverrides="">...
</trim>

4. set使用

<!-- set可以帮我们去掉多余的逗号 -->
<update id="updateAuthorIfNecessary">update Author<set><if test="username != null">username=#{username},</if><if test="password != null">password=#{password},</if><if test="email != null">email=#{email},</if><if test="bio != null">bio=#{bio}</if></set>where id=#{id}
</update>

5. foreach使用

<!-- foreach -->
<!--
collection: 可以是list,也可以是map,这些是对应集合默认的别名,可以通同@Param指定其他别名
index: collection是list是该字段代表list的索引,collection是map是该字段代表key
separator: 表示元素的间隔符
foreach标签中出现的属性可以选用,再批量插入时就可以不用open和close属性
-->
<select id="selectPostIn" resultType="domain.blog.Post">SELECT *FROM POST PWHERE ID in<foreach item="item" index="index" collection="list" open="(" separator="," close=")">#{item}</foreach>
</select>
<!-- 批量插入 -->
<insert id="insertTest">INSERT INTO user_tbl(id,name)VALUES<foreach collection="userList" item="user" separator=",">(#{user.id}, #{user.name})</foreach>
</insert>

6. bind使用

<!-- bind 适合给固定值前后拼接字符串 -->
<select id="selectBlogsLike" resultType="Blog"><bind name="likename" value="'%' + #{username} + '%'" />SELECT * FROM BLOGWHERE title LIKE #{likename}
</select>

7. sql使用

<!-- sql -->
<!-- 这个元素可以用来定义可重用的 SQL 代码片段,以便在其它语句中使用。 参数可以静态地(在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值 -->
<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>
<select id="selectUsers" resultType="map">select<include refid="userColumns"><property name="alias" value="t1"/></include>,<include refid="userColumns"><property name="alias" value="t2"/></include>from some_table t1cross join some_table t2
</select>

MyBatis动态标签相关推荐

  1. mybatis 动态标签详解

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

  2. Mybatis动态标签之foreach

    foreach元素的属性主要有 item,index,collection,open,separator,close foreach 标签:顶层的遍历标签,单独使用无意义 collection 属性: ...

  3. mybatis常用标签和动态查询

    这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [mybatis ...

  4. 9.mybatis动态SQL标签的用法

    mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...

  5. MyBatis——动态SQL语句——if标签和where标签复合使用

    功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...

  6. Mybatis 动态sql语句(if标签和where标签)

    功能:根据性别和名字查询用户 查询sql语句: SELECT id, username, birthday, sex, address FROM `user` WHERE sex = 1 AND us ...

  7. 面试题—Mybatis动态sql是什么意思?常用的标签有哪些和用途?

    传统jdbc方法中,在写组合的多表复杂sql语句时,需要去拼接sql语句,稍不注意少写一个空格或"",就会导致报错. 这个Mybatis动态sql的功能,就拥有有效的解决了这个问题 ...

  8. MyBatis动态SQL(认真看看, 以后写SQL就爽多了)

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...

  9. 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...

最新文章

  1. 显示DataGrid序号的一个适用的方法
  2. MySQL AHI 实现解析
  3. vb.net 线程偶尔不会自动关闭_C# 多线程系列(7)手动线程通知
  4. python 网络设备管理软件_一个查看网络设备信息Python小程序
  5. 虚拟机登服务器,用虚拟机登录云服务器
  6. Codeforces Round #712 (Div. 2) E. Travelling Salesman Problem 思维转换
  7. axure文本框提示文字_Axure教程:一个中继器实现密码验证
  8. 数组实现UITabview的cell设置
  9. html input自动获取光标位置,HTML contenteditable 标签里怎样获取光标像素位置?
  10. VirtualBox 桥接模式
  11. c语言课程主要目的和内容,C语言程序设计课程教学大纲
  12. Windows 10驱动开发入门(五):创建虚拟显示器 Indirect Display驱动开发
  13. easydarwin 安装_easydarwin支持什么格式
  14. 编译器设计(二)——上下文无关文法及推导
  15. QWE解码Python实现【网络攻防CTF】(保姆级图文)
  16. 优课在线 实境英语作业3Unit 11-15
  17. 最适合人工智能开发的5种编程语言
  18. 为什么IM不适合直接运行在公链上?
  19. 计算机防火墙不能更改,win7无法更改防火墙设置提示系统报错怎么办
  20. win10系统磁盘分区

热门文章

  1. ThreeJS 地球上撒点
  2. 【Android】隐藏底部虚拟按键,亲测可用
  3. pandas实现行转列(网优民工的福音)
  4. 幼儿园门禁管理太难?解决策略都在这里
  5. Rstudio的拓展包下载问题
  6. 屌丝男关于游戏市场的一些想法
  7. 美和易思 MOOT去鼠标检测,快进,倍速,自动下一章
  8. 变电站AR智能巡检系统-广州华锐互动
  9. 开始整理学习笔记啦~~~
  10. 模块称重51单片机电子秤称重压力检测阈值报警仪系统 源码+原理图仿