动态sql的实现(记一次面试问题)

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>

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值