sql中in的用法
做项目是遇到的问题:举例如下:delete from ResultPushMsg where id in(‘1’,‘2’);在sql查询器中可以正确执行,但在MyBatis中的使用,却报错@Delete("delete from ResultPushMsg where id in #{successId} ")void deleteSuccessId(@Param("
做项目是遇到的问题:
举例如下:
delete from ResultPushMsg where id in (‘1’,‘2’);
在sql查询器中可以正确执行,但在MyBatis中的使用,却报错
@Delete("delete from ResultPushMsg where id in #{successId} ")
void deleteSuccessId(@Param("successId")String successId);
其中 id in (‘1’,‘2’);这样的写法,看似很简单,但是MyBatis不支持。但是MyBatis中提供了foreach语句实现IN查询,foreach语法如下:
foreach语句中, collection属性的参数类型可以使:List、数组、map集合
collection: 必须跟mapper.java中@Param标签指定的元素名一样
item: 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样。
index:表示在迭代过程中每次迭代到的位置(下标)
open:前缀, sql语句中集合都必须用小括号()括起来
close:后缀
separator:分隔符,表示迭代时每个元素之间以什么分隔
一、 当查询的参数为一个时
(1)、如果参数的类型是Array,在使用时,collection属性要必须指定为 array。
void insertImport(String[] ids);
@Insert(" <script> insert into nipt select * from nipt_temp where n_id in " +
" <foreach collection='array' item='n_id' index='index' open='(' close=')' separator=',' > " +
" #{n_id} " +
"</foreach> </script> ")
void insertImport(String[] ids);
(2)、如果参数的类型是List, 在使用时,collection属性要必须指定为 list
List selectByIdSet(List ids);
@Select(" <script> select * from nipt_temp where n_id in " +
" <foreach collection='list' item='n_id' index='index' open='(' close=')' separator=',' > " +
" #{n_id} " +
"</foreach> </script> ")
List<User> selectByIdSet(List ids);
二、有多个查询参数时
当查询的参数有多个时,有两种方式可以实现,一种是使用@Param(“xxx”)进行参数绑定(collection属性可以指定名称),另一种可以通过Map来传参数。
--sqlserver2005,2008通用
@Insert("<script> INSERT INTO pushHistory (id,openId,patientId,tid,first,keyword) " +
" <foreach collection='result' item='item' index='index' > \n" +
" select #{item.id},#{item.openId},#{item.patientId},#{item.tid},#{item.first},#{i} " +
" <if test='index != (result.size() - 1)'> union all </if>" +
" </foreach> </script> ")
void insertBatchHistory(@Param("result")List<ListResult> result,@Param("i")int i);
--sqlserver2008
@Insert("<script> INSERT INTO pushHistory (id,openId,patientId,tid,first,keyword) VALUES " +
" <foreach collection='result2' item='item' separator=',' > \n" +
" (#{item.id},#{item.openId},#{item.patientId},#{item.tid},#{item.first},#{i} ) " +
" </foreach> </script> ")
void insertBatchHistory(@Param("result")List<ListResult> result,@Param("i")int i);
Map方式
Map<String, Object> params = new HashMap<String, Object>(2);
params.put(“name”, name");
params.put(“idList”, list);
@Select(" <script> select * from nipt_temp where n_id in " +
" <foreach collection='idList' item='n_id' index='index' open='(' close=')' separator=',' > " +
" #{n_id} " +
"</foreach> and n_name=#{name} </script> ")
List<NIPT> insertImport(Map<String, Object> params);
更多推荐
所有评论(0)