mybatis学习(四)--动态SQL
来源:互联网 发布:c4dr16 mac注册机 编辑:程序博客网 时间:2024/06/05 10:32
动态SQL是mybatis最重要的特性,它可以彻底解决jdbc那样的拼接条件的痛苦。可以使用以下标签:
•if
•choose (when, otherwise)
•trim (where, set)
•foreach
if 标签
eg : 需求:根据username查询,如果gender不等于null,同时也根据gender查询。
<select id="getUsers" resultType="user"> select * from user where username = #{username} <if test="gender!= null"> and gender = #{gender} </if> </select>
- choose, when, otherwise标签
有时候,我们并不希望是有许多条件,我们仅希望以某一种条件进行查询,我们就可以像java的jstl标签一样。
<select id="getUsersChoose" resultType="user"> select * from user where <choose> <when test="username!=null"> username=#{username} </when> <when test="password!=null"> password=#{password} </when> <otherwise> gender=#{gender} </otherwise> </choose> </select>
trim, where, set标签
以上的两类标签在使用的时候,会出现一些问题,比如使用if标签更新User,动态如下
<update id="updateUser" parameterType="user"> update user set <if test="username!= null"> username=#{username} </if> <if test="password!= null"> ,password=#{password} </if> <if test="gender!= null"> ,gender=#{gender} </if> where id = #{id} </update>
如果username=null,其他都不是null,这样在mybatis生成动态sql的时候就会是这样;
update user set , password=#{password},gender=#{gender} where id = #{id}
有没有注意到set关键字后面多了一个“,”,这样就拼成了一个错误的sql语句。
我们可以使用trim标签对以上sql进行改造,
<update id="updateUser" parameterType="user"> update user set <trim prefixOverrides=","> <if test="username!= null"> username=#{username} </if> <if test="password!= null"> ,password=#{password} </if> <if test="gender!= null"> ,gender=#{gender} </if> </trim> where id = #{id} </update>
其中:prefixOverrides属性可以将多出的“,”忽略。
也可以直接使用set标签改造,如下
<update id="updateUser" parameterType="user"> update user <set> <if test="username!= null"> username=#{username} </if> <if test="password!= null"> ,password=#{password} </if> <if test="gender!= null"> ,gender=#{gender} </if> </set> where id = #{id} </update>
where标签也有类似的功能,它可以代替sql中的关键字where,并将拼接后的sql中多余的 “,”,或者“and”忽略,此处就不做介绍了。
- foreach标签
另一个很必要的操作集合动态SQL的标签是foreach。
因为mysql数据库支持values(),(),()的sql语法,当批量插入的时候可以使用如下sql。
<insert id="addUsers" parameterType="list"> insert into user(username,password,gender) values <foreach collection="list" item="user" separator=","> (#{user.username},#{user.password},#{user.gender}) </foreach></insert>
此处仅介绍各个标签常用的方法,更多用法请参考官方提供的pdf文件。
阅读全文
0 0
- MyBatis学习(四)- 动态SQL
- MyBatis学习(四)- 动态SQL
- mybatis学习(四)--动态SQL
- mybatis学习(四)动态SQL语句
- MyBatis动态sql(四)
- MyBatis学习笔记(四)--动态SQL的使用
- MyBatis学习 之 四、动态SQL语句
- MyBatis学习 之四、动态SQL语句
- MyBatis学习 之 四、动态SQL语句
- Mybatis学习笔记之四:动态SQL
- 四.Mybatis动态SQL
- MyBatis入门(四)---动态SQL
- mybatis系列-动态 SQL(四)
- mybatis学习四之输入输出映射以及动态sql
- mybatis系列四:动态SQL
- MyBatis动态SQL学习
- mybatis系列四:mybatis 动态sql语句
- mybatis学习笔记(三) 动态sql
- 接听电话流程分析
- Docker使用非root用户
- linux用户抢占和内核抢占
- (人脸识别1-3)——ubuntu16.04 安装pychram
- C语言内存管理函数
- mybatis学习(四)--动态SQL
- 互联网公司Java后台开发面试
- synchronized修饰方法和修饰方法块(二)
- 点击扫一扫二维码返回文本内容
- 单体模式+模板类+智能指针实现CSingleton
- 文件输入流 和输出流
- 什么是互联网泡沫
- 《视频直播技术详解》系列:(5)处理
- 预编译头文件:STDAFX.CPP,STDAFX.H