在我们实际开发过程中动态SQL的使用远多于静态是SQL(前面用的所有sql都是静态的,也就是一成不变的),而动态SQL是根据条件的不同,SQL语句也会随之动态的改变,
if 用于进行条件判断,
test属性用于指定判断条件. 为了拼接条件, 在 SQL 语句后强行添加 1=1 的恒成立条件.
但是会造成浪费资源等情况所以需要使用where标签来配合
where用于管理 where 子句.有如下功能:a) 如果没有条件满足,不会生成 where 关键字。b) 如果有条件满足, 会添加 where 关键字c) 如果第一个条件中有 and,会自动去除and。
示例代码
<?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="selUser" resultType="User"> select * from tb_user <!--where 用于配合if做where用于管理 where 子句.有如下功能: a) 如果没有条件满足,不会生成 where 关键字。 b) 如果有条件满足, 会添加 where 关键字 c) 如果第一个条件中有 and,会自动去除and。 --> <where> <!--if 用于条件判断 test 属性用于设定判断 类似于java中if后判断的条件 --> <if test="username != null and username !=''"> and username = #{username} </if> <if test="password != null and password !=''"> and password = #{password} </if> </where> </select> </mapper>
测试代码1:有参数情况
测试代码2:无参数情况
测试3:单一参数情况
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
这是一组标签,功能类似于switch...case..用这个标签就要注意了,因为where永远后面只有一个子句,也就是只有一个查询条件mybatis.org//DTDMapper3.0//EN""http://mybatis.o
include这个标签一般是用来实现sql语句复用的比如select*fromtb_user这个*包含了id,username,password*虽然方便了我们,但实际上麻烦都交给了程序,所以面对多次复用的语句可以配合sql标签提取处理来,具体处理为运行sql语句查看
forearch另外一个动态sql通用的必要操作是迭代一个集合,通常是构建在IN条件中的.正常的sql语句中使用in的例子select*fromtb_userwhereidin(1,2,3,4)在mysql中,就将后面的查询的条件(1,2,3,4)封装成一个集合传入,并且用forearch处理接口代码packagecom.lin.mapper;importcom.lin.pojo.User;imp
Trimprefix:前缀,表示向前面添加内容prefixOverrides:从前面删除内容suffix:后缀,表示向后面添加内容suffixOverrides:从后面删除内容先对灵活,实际开发中用于解决where和set做不到的操作的时候使用Bind常用在模糊查询上两个标签name:要用于模糊查询的关键字value:写法"'%'+用于模糊查询的关键字+'%'"使用后后面的查询条件不再使用等号,而
set子句.有如下功能:a)如果有条件满足,会添加set关键字并执行sql语句b)如果第一个条件中有逗号,但后续的条件没有满足的,会自动去尾部逗号。c)如果修改条件都不满足就不生产set语句,出现错误,可以使用在set中添加id=#{id}来避免错误updatetb_user 添加我为好友,拉您入交流群! 请使用微信扫一扫!
添加我为好友,拉您入交流群!
请使用微信扫一扫!