Java⾃学之mybatis:动态SQL的choose、foreach、bind标签Part 1
choose标签
在mybatis中没有else标签,如果想使⽤这样的效果,可以使⽤when otherwise这⼀对标签来实现if——else所实现的功能。
<select id="listProduct" resultType="Product">
SELECT * FROM product_
<where>
<choose>
<when test="name != null">
and name like concat('%',#{name},'%')
</when>
<when test="price !=null and price != 0">
and price > #{price}
</when>
<otherwise>
and id >1
</otherwise>
</choose>
</where>
</select>
上⾯配置信息的作⽤:如果name=null,同时price=null或者price=0时,查询product_中所有id>1的Product。
Part 2
foreach标签
foreach标签通常⽤于in的SQL语法中,下列配置信息拼接成的SQL语句是:SELECT * FROM product_ WHERE ID in(1,3,5)。意思是查product_中ID是1、3、5的Product。
SELECT * FROM product_
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
--------------------------⼿动分割线---------------------------------
代码块:
List<Integer> ids = new ArrayList();
ids.add(1);
ids.add(3);
ids.add(5);
List<Product> ps = session.selectList("listProduct",ids);
其中:item表⽰集合中每⼀个元素进⾏迭代时的别名,index指 定⼀个名字,⽤于表⽰在迭代过程中,每次迭代到的位置。
collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不⼀样的,主要有⼀下3种情况:
1. 如果传⼊的是单参数且参数类型是⼀个List的时候,collection属性值为list(我们这⾥传⼊的就是⼀个List)。
2. 如果传⼊的是单参数且参数类型是⼀个array数组的时候,collection的属性值为array。
sql自学难吗3. 如果传⼊的参数是多个的时候,我们就需要把它们封装成⼀个Map了,当然单参数也可。
Part 3
bind标签
bind标签就像是再做⼀次字符串拼接,⽅便后续使⽤。⽐如之前学习的模糊查使⽤bind标签之后的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"/dtd/mybatis-3-mapper.dtd">
<mapper namespace="c.vaefun.pojo">
<!-- 本来的模糊查询⽅式 -->
<!--        <select id="listProduct" resultType="Product"> -->
<!--            select * from  product_  where name like concat('%',#{0},'%') -->
<!--        </select> -->
<select id="listProduct" resultType="Product">
<bind name="likename" value="'%' + name + '%'" />
select * from  product_  where name like #{likename}
</select>
</mapper>
可以看出,<bindname="likename"value="'%' + name + '%'"/>这⼀句就是给“'%' + name + '%'”取了⼀个别名likename。该标签的引⽤⽅便后期的维护及代码管理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。