MyBatis动态标签
常见的动态标签
if
choose, when, otherwise
trim,where,set
foreach
bind
sql
mybatis通过OGNL表达式来进行取值操作;比如:#{username}
Mybatis两个内置参数
_parameter: 如果接口传入多个参数,这些参数都包含在这一个参数中,如果传入一个,那该参数就代表传来的参数
_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动态标签相关推荐
- mybatis 动态标签详解
if 标签 if标签中有一个test属性,test属性值是一个符合OGNL要求的判断表达式,表达式的结果可以使true或者false, 除此之外所有的非0值都为true (1).数字类型 1.1 例如 ...
- Mybatis动态标签之foreach
foreach元素的属性主要有 item,index,collection,open,separator,close foreach 标签:顶层的遍历标签,单独使用无意义 collection 属性: ...
- mybatis常用标签和动态查询
这里是修真院后端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析后端知识/技能,本篇分享的是: [mybatis ...
- 9.mybatis动态SQL标签的用法
mybatis动态SQL标签的用法 动态 SQL MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦 ...
- MyBatis——动态SQL语句——if标签和where标签复合使用
功能需求 根据性别和名字查询用户 官方文档 MyBatis--动态 SQL SQL语句 SELECT id, username, birthday, sex, address FROM `user` ...
- Mybatis 动态sql语句(if标签和where标签)
功能:根据性别和名字查询用户 查询sql语句: SELECT id, username, birthday, sex, address FROM `user` WHERE sex = 1 AND us ...
- 面试题—Mybatis动态sql是什么意思?常用的标签有哪些和用途?
传统jdbc方法中,在写组合的多表复杂sql语句时,需要去拼接sql语句,稍不注意少写一个空格或"",就会导致报错. 这个Mybatis动态sql的功能,就拥有有效的解决了这个问题 ...
- MyBatis动态SQL(认真看看, 以后写SQL就爽多了)
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:cnblogs.com/homejim/p/9909657. ...
- 认真看看, 以后写 SQL 就爽多了:MyBatis 动态 SQL:
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 阿进的写字台 来源 | cnblogs.com ...
最新文章
- 显示DataGrid序号的一个适用的方法
- MySQL AHI 实现解析
- vb.net 线程偶尔不会自动关闭_C# 多线程系列(7)手动线程通知
- python 网络设备管理软件_一个查看网络设备信息Python小程序
- 虚拟机登服务器,用虚拟机登录云服务器
- Codeforces Round #712 (Div. 2) E. Travelling Salesman Problem 思维转换
- axure文本框提示文字_Axure教程:一个中继器实现密码验证
- 数组实现UITabview的cell设置
- html input自动获取光标位置,HTML contenteditable 标签里怎样获取光标像素位置?
- VirtualBox 桥接模式
- c语言课程主要目的和内容,C语言程序设计课程教学大纲
- Windows 10驱动开发入门(五):创建虚拟显示器 Indirect Display驱动开发
- easydarwin 安装_easydarwin支持什么格式
- 编译器设计(二)——上下文无关文法及推导
- QWE解码Python实现【网络攻防CTF】(保姆级图文)
- 优课在线 实境英语作业3Unit 11-15
- 最适合人工智能开发的5种编程语言
- 为什么IM不适合直接运行在公链上?
- 计算机防火墙不能更改,win7无法更改防火墙设置提示系统报错怎么办
- win10系统磁盘分区