今天学习了动态sql三个表现
1.if判断
<if test="_parameter!=null and _parameter!=0">
and id=#{_parameter}<!--当传入数据只有一个时,要用_parameter代替参数,才可以使用 -->
</if>
test的参数是限定条件,前面加and是为了拼接语句
还有where语句
<where></where><!-- 会去掉通过的第一个if语句的and,这样就会完成拼接-->
2.sql语句的拼接
假如有一段语句要重复使用,可以将重复的内容取出来然后通过标识符被其他部分所共用
<!-- 定义sql片段 -->
<!-- id为sql片段唯一标识符 -->
<sql id="sqlfragment">
<if test="_parameter!=null and _parameter!=0">
and id=#{_parameter}<!--当传入数据只有一个时,要用_parameter代替参数,才可以使用 -->
</if>
</sql>
再需要调用它的语句中这样写
<select id="findUserById" parameterType="int" resultType="User">
select * from mb_test1
<where><!--如果refid指定的id不在本mapper文件中,则前面要加namespace -->
<include refid="sqlfragment"></include> 这句则是调用段sql语句
</where>
</select>
3.foreach
加入需要完成多个id的限定查找,需要传入一个list值,这时候需要用foreach解决
<!-- 通过传入一个集合,完成多个id的限定查找 -->
<collection>表示对象标识符,也就是list对象的名称
item是每个遍历生成的对象
open是开始遍历时要拼接的串
close是结束时要拼接串
separator是拼接两个遍历对象的字符串
实现一个 select * from mb_test1 where id=1 or id=3 or id=5
<select id="findListById" parameterType="com.mb.po.UserQueryVo" resultType="com.mb.po.UserCustom">select * from mb_test1 where
<foreach collection="ids" item="every_id" open="" close= "" separator="OR" >
id=#{every_id}
</foreach>
</select>