一. SQL语法实现In查询
1.SQL语句实现In查询
SELECT * FROM user_info WHERE user_name in ('xixi','haha');
二. MyBatis实现In查询
MyBatis提供foreach语句实现In查询。foreach语法如下:
collection:该属性的对应方法的参数类型可以是List、数组、Map。如果方法的参数类型不属于前三种,则必须和方法参数@Param指定的元素名一致。
item: 表示迭代过程中每个元素的别名。可以随便起名,但是必须跟元素中的#{}里面的名称一致。
index:表示迭代过程中每次迭代到的位置(下标)
open:前缀
close:后缀
separator:分隔符,表示迭代时每个元素之间以什么分隔。
1、Dao层方法的参数只有一个
当Dao层方法的参数只有一个时,有两种方式实现:
法1:如果参数类型是List, 则mapper.xml文件中collection值必须为list。
法2:如果参数类型是Array,则mapper.xml文件中collection值必须为array。
//------------------UserInfoDao.java--------------------
public interface UserInfoDao {
// 法1:参数类型是List
List<UserInfoDO> getUserInfobyNames1(List<String> names);
// 法2:参数类型是Array
List<UserInfoDO> getUserInfobyNames2(String[] names);
}
//------------------UserInfoMapper.xml--------------------
<!-- 法1:参数类型是List -->
<select id="getUserInfobyNames1" resultType="com.zijikanwa.model.UserInfoDO">
SELECT * FROM user_info WHERE user_name in
<foreach collection="list" item="name" index="index" open="(" close=")" separator=",">
#{name}
</foreach>
</select>
<!-- 法2:参数类型是Array -->
<select id="getUserInfobyNames2" resultType="com.zijikanwa.ssmspringboottest.model.UserInfoDO">
SELECT * FROM user_info WHERE user_name in
<foreach collection="array" item="name" index="index" open="(" close=")" separator=",">
#{name}
</foreach>
</select>
2、 Dao层方法的参数有多个
1.当Dao层方法的参数有多个时,有两种方式实现:
- 法1:使用@Param(“xxx”)进行参数绑定
- 法2:通过Map来传参数
- 法3:通过对象来传参数
2.1属性传参使用@Param(“xxx”)实现
//UserInfoDao.java ------------------------------------------------------------
public interface UserInfoDao {
List<UserInfoDO> getUserInfobyIdAndName1(@Param("id") int id, @Param("names") String[] names);
}
//UserInfoMapper.xml ------------------------------------------------------------
<select id="getUserInfobyIdAndName1" resultType="com.zijikanwa.ssmspringboottest.model.UserInfoDO">
SELECT * FROM user_info WHERE user_info_id=#{id} and user_name in
<foreach collection="names" item="name" index="index" open="(" close=")" separator=",">
#{name}
</foreach>
</select>
2.2 map传参实例
// UserInfoDao.java------------------------------------------------------------
public interface UserInfoDao {
List<UserInfoDO> getUserInfobyIdAndName2(Map<String,Object> params);
}
// UserInfoMapper.xml------------------------------------------------------------
<select id="getUserInfobyIdAndName2" resultType="com.zijikanwa.ssmspringboottest.model.UserInfoDO">
SELECT * FROM user_info WHERE user_info_id=#{id} and user_name in
<foreach collection="names" item="name" index="index" open="(" close=")" separator=",">
#{name}
</foreach>
</select>
2.3对象传参实例:
//接口地址 ------------------------------------------------------------
IPage<WarehouseInventoryVO> pageList(Page page, @Param("query") WarehouseInventoryQuery query);
// 核心遍历部分------------------------------------------------------------
WHERE 1 = 1
<!-- 【 ■■■■■■■■■查询条件■■■■■■■■■仓库ID列表】 -->
<if test="query != null and query.warehouseIdList != null and !query.warehouseIdList.isEmpty()">
AND wi.warehouse_id IN
<foreach item="item" collection="query.warehouseIdList" open="(" separator="," close=")">
#{item}
</foreach>
</if>