这是一组标签 ,功能类似于 switch...case..
用这个标签就要注意了,因为where永远后面只有一个子句,也就是只有一个查询条件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace: 命名空间, 可以随意定义, 一般情况下要写全限定路径 MyBatis管理SQL语句是通过namespace+id来定位的 --> <mapper namespace="com.lin.mapper.UserMapper"> <select id="selUser1" resultType="User"> select * from tb_user <where> <choose> <when test="username != null and username !=''"> and username = #{username} </when> <when test="password != null and password !=''"> and password = #{password} </when> <otherwise> and 1 = 1 </otherwise> </choose> </where> </select> </mapper>
测试1:没有参数 可以看到,直接使用了otherwise的条件
测试2:有账号密码 ,结果:只根据账号查询忽略后面的查询条件
测试3:只有密码 ,结果:查询出密码相同的用户
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
在我们实际开发过程中动态SQL的使用远多于静态是SQL(前面用的所有sql都是静态的,也就是一成不变的),而动态SQL是根据条件的不同,SQL语句也会随之动态的改变,ifif用于进行条件判断,test属性用于指定判断条件.为了拼接条件,在SQL语句后强行添加1=1的恒成立条件.但是会造成浪费资源等情况所以需要使用where标签来配合wherewhere用于管理where子句.有如下功能:a)如果没
set子句.有如下功能:a)如果有条件满足,会添加set关键字并执行sql语句b)如果第一个条件中有逗号,但后续的条件没有满足的,会自动去尾部逗号。c)如果修改条件都不满足就不生产set语句,出现错误,可以使用在set中添加id=#{id}来避免错误updatetb_user 添加我为好友,拉您入交流群! 请使用微信扫一扫!
添加我为好友,拉您入交流群!
请使用微信扫一扫!