1.前端时间听朋友讲了这样一个面试问题:如果一个客户在北京购买了该公司的产品,登录用户账户时可以直接根据产品购买地来查出该订单信息;如果还在上海、广州购买了该公司的产品,可以用地区in(北京,上海,广州)来查出该用户的所有订单信息;如果用户在全国36个省市区都购买了产品,要如何查出来所有的订单信息。要求:不允许修改sql和代码
2.刚刚听到这个问题的时候,的确存在疑虑,不可能说把36个省市区的地区编码都写到in()中,但又要求查出所有的地区购买订单,一下子没反应过来,后来才知道面试官想问的是:动态sql。具体的看下面的例子
3.动态其中一个foreach用来遍历,遍历的对象可以是数组,也可以是集合。
相关属性:
Collection:collection属性的值有三个分别是list、array、map三种。
Open:前缀。
Close:后缀。
Separator:分隔符,表示迭代时每个元素之间以什么分隔。
Item:表示在迭代过程中每一个元素的别名。
Index:用一个变量名表示当前循环的索引位置。
接口
select deleteKeys(List<PrpdProductWorkInfoKey> keys);
映射文件
<select id="deleteKeys" parameterType="java.util.List">
select from student where
<foreach collection="list" index="index" item="val" separator="or" open="(" close=")">
( name = #{val.name,jdbcType=VARCHAR}
and id = #{val.id,jdbcType=VARCHAR}
and city = #{val.city,jdbcType=VARCHAR} )
</foreach>
</select>