Mybatis(4) 动态SQL语句的创建

欢迎访问:我的个人网站

创建动态SQL语句

一个statement的编写可以看作是对特定接口的某一方法的实现,在对每个方法实现的过程中,常使用select、update、delete、insert标签来表明方法操作所属的类别。在编写的时候,**可以配合使用其他标签进行statement的创建,包括sql片段标签,where标签、if标签,foreach标签,**来将所编写的statement标签作为一个动态的SQL语句存在。具体的使用实例如下:

##1.SQL片段
当一个映射文件对一个接口进行 “实现” 的时候,如果存在重复的实现逻辑代码。那么可以将该部分的代码通过SQL片段的形式单独抽离出来,然后在其它地方进行引用。以提高利用,具体的使用形式如下:

	<!--id指的就是该SQL片段的唯一标识,后续在进行引用的时候会使用到-->
	<sql id="SQL_01">
  		 		<!-- 
  		 			指定共用的代码片段
  		 		 -->
    </sql>

后续进行引用的时候需要在使用的地方用标签include来进行引入。需要指定属性refid为所要引入的SQL片段id

<inclide refid="SQL_01"></include>

##2.if与where标签
这两个标签通常配合进行使用,来创建满足条件的动态SQL语句。if标签用于对给定的表达式进行判断,当所给的条件判断为真的时候,则将if标签体中的内容加入到最终渲染的SQL语句里面。而这个所判断的条件需要作为属性test 的值来传入。if标签体的内容一般作为条件存在。而where标签会渲染为SQL语句的where,并且会自动的将语句的第一个and字符移除,以保持SQL语义的正确。实例如下:

<select id="search" parameterType="user" resultType = "user">
  				select * from tb_user
  				<where>
  						<if test="id!=null and id!=-1">
  							<!-- 传入的id不为空且不等于-1, 则把下面的语句添加到最终的SQL语句里面 -->
  							and id =#{id}
  						</if>
  						<if test="name!=null and name!='' ">
  							and name like '%${name}%'
  						</if>
  				</where>
</select>

以上所创建的statement是对一个搜索用户的方法的实现,where以及if标签所实现的语义为:

  • 当所传入的user对象的属性id不为空以及-1的时候,那么SQL语句就会渲染为:
    • select * from tb_user where id = #{id}
  • 当所传入的user对象的属性name与id都满足test的测试条件时,则渲染为:
    • select * from tb_user where id = #{id} and name like ‘%${name}%’

##3.foreach标签
用于使用循环的方法来创建动态SQL语句,比如对多个具有相同特征的语句段进行处理的时候,可以使用foreach进行循环,来创建最终的语句,foreach标签具有几个属性存在,他们的含义如下:

  • collection : 遍历的对象
  • item:每次遍历时候所获得的对象
  • open:开始遍历时候要拼接的串
  • close:结束遍历时候需要拼接的串
  • separator:每次遍历时要在两个对象中间添加的串

如果给定一个user对象里存在一个int数组ids,数组内的每个数据表示所要获得User对象的id,那么就可以使用foreach标签创建如下形式的语句:

select * from tb_user where id = 1 or id = 3 or id = 4 or id = XXX

而使用foreach标签进行创建的实例如下:

<select id="selectByIds" resultType="user" parameterType="user">
  		 		select * from tb_user
  		 		<where>
					<foreach collection="ids" close="" open="" separator="or" item="id" index="">
  		 				<!--每次遍历需要拼接的串 -->
  		 				id =#{id}
	  		 		</foreach>
  		 		</where>
</select>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值