如果有以下sql 语句,这条sql语句有in操作。
SELECT
*
FROM
product_db.productinfo pi
WHERE pi.isvalid = 1
AND pi.id IN (22, 60)
如果要在Mybatis中使用这条sql语句,那么应该如何操作呢?
下面就来简单的演示一下这个操作。
Mybatis映射文件如下。
<select id="queryAllOpenProduct" parameterType="com.tims.open.domain.OpenProductQueryCondition"
resultType="com.tims.open.domain.OpenProduct">
SELECT
*
FROM
product_db.product p
WHERE
p.isvalid = 1
<if test="list != null">
<foreach collection="list" index="index" item="item" separator="," open="AND p.id IN (" close=")">
#{item}
</foreach>
</if>
</select>
//查询condition类
Public OpenProductQueryCondition{
private Integer productId;
private List<Integer> list;
}
可以看到,在Mybatis中对in的操作是这样的。
foreach collection="list" index="index" item="item" separator="," open="AND p.id IN (" close=")">
#{item}
</foreach>
属性说明:
- list:传入的condition中的list,mybatis将会遍历中集合中的元素。
- index:指定一个名字,用于表示在迭代过程中,每次迭代到的位置。
- item:表示集合中每一个元素进行迭代时的别名。
- open:表示该语句以什么开始。
- close:表示以什么结束。
- separator:表示在每次进行迭代之间以什么符号作为分隔符。