mybatis中使用not in与 in的写法说明
使用not in与 in的写法
首先声明我不是很喜欢用foreach,所以我的代码中很少出现foreach。不废话了,上代码:
in的用法
我的id是Long类型的
service方法,有一个Long的集合:
public List<RbacMenu> listByPackageId(List<Long> ids, String systemCode) { Map<String, Object> map = new HashMap<String, Object>(); if(ids.size()!=0) { StringBuilder sbd = new StringBuilder(); for(Long cateIds:ids){ sbd.append(cateIds+","); } String idStr = sbd.toString(); idStr = idStr.substring(0,idStr.length()-1); map.put("ids", idStr); }
实体类.xml
select * from xxx where <if test="ids != null"> FIND_IN_SET(id,#{ids}) </if>
not in的用法
service方法,有一个Long的集合:
public List<RbacMenu> listByPackageId(List<Long> ids, String systemCode) { Map<String, Object> map = new HashMap<String, Object>(); if(ids.size()!=0) { StringBuilder sbd = new StringBuilder(); for(Long cateIds:ids){ sbd.append(cateIds+","); } String idStr = sbd.toString(); idStr = idStr.substring(0,idStr.length()-1); map.put("notids", idStr); }
实体类.xml
select * from xxx where <if test="notids != null"> NOT FIND_IN_SET(id,#{notids}) </if>
使用in查询时的注意事项
当查询的参数只有一个时
findByIds(List<Long> ids)
a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
<select id="findByIdsMap" resultMap="BaseResultMap"> Select <include refid="Base_Column_List" /> from jria where ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>
findByIds(Long[] ids)
b 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
<select id="findByIdsMap" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from jria where ID in <foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </foreach> </select>
当查询的参数有多个时
例如 findByIds(String name, Long[] ids)
这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样在collection属性可以指定名称
下面是一个示例
Map<String, Object> params = new HashMap<String, Object>(2); params.put("name", name); params.put("ids", ids); mapper.findByIdsMap(params); <select id="findByIdsMap" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from jria where ID in <foreach item="item" index="index" collection="ids" open="(" separator="," close=")"> #{item} </foreach> </select>
完整的示例如下:
例如有一个查询功能,Mapper接口文件定义如下方法:
List<Jria> findByIds(Long... ids);
使用 in 查询的sql拼装方法如下:
<select id="findbyIds" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from jria where ID in <foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </foreach> </select>
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
解决maven中只有Lifecycle而Dependencies和Plugins消失的问题
这篇文章主要介绍了maven中只有Lifecycle而Dependencies和Plugins消失的问题及解决方法,本文通过图文的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2020-07-07利用java、js或mysql计算高德地图中两坐标之间的距离
最近因为工作的需求,需要计算出高德地图中两个坐标的距离,通过查找相关资料发现了多种实现的方法,下面这篇文章主要给大家介绍了关于利用java、js或mysql计算高德地图中两坐标之间距离的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。2017-10-10IntelliJ IDEA使用教程从入门到上瘾(2019图文版)
这篇文章主要介绍了IntelliJ IDEA使用教程从入门到上瘾(2019图文版),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-12-12
最新评论