mybaties中where in条件写法,获取某对象List的一个属性


MyBatis中提供了foreach语句实现IN查询,foreach语法如下:

foreach语句中, collection属性的参数类型可以使:List、数组、map集合
​ collection: 必须跟mapper.java中@Param标签指定的元素名一样
​ item: 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样。
   index:表示在迭代过程中每次迭代到的位置(下标)
   open:前缀, sql语句中集合都必须用小括号()括起来
​ close:后缀
   separator:分隔符,表示迭代时每个元素之间以什么分隔

正确的写法有以下几种写法:

 

(一)、selectByIdSet(List idList)

 

如果参数的类型是List, 则在使用时,collection属性要必须指定为 list

List<User> selectByIdSet(List idList);
 
<select id="selectByIdSet" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List" />
    from t_user
    WHERE id IN
    <foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
      #{id}
    </foreach>
</select>

(二)、List<User> selectByIdSet(String[] idList)

 

如果参数的类型是Array,则在使用时,collection属性要必须指定为 array

List<User> selectByIdSet(String[] idList);
 
<select id="selectByIdSet" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List" />
    from t_user
    WHERE id IN
    <foreach collection="array" item="id" index="index" open="(" close=")" separator=",">
      #{id}
    </foreach>
</select>

(三)、参数有多个时

 

当查询的参数有多个时,有两种方式可以实现,一种是使用@Param("xxx")进行参数绑定,另一种可以通过Map来传参数。

 

3.1 @Param("xxx")方式

List<User> selectByIdSet(@Param("name")String name, @Param("ids")String[] idList);
 
<select id="selectByIdSet" resultMap="BaseResultMap">
    SELECT
    <include refid="Base_Column_List" />
    from t_user
    WHERE  name=#{name,jdbcType=VARCHAR} and id IN
    <foreach collection="idList" item="id" index="index"
             open="(" close=")" separator=",">
      #{id}
    </foreach>
</select>

3.2 Map方式

Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("idList", ids);
mapper.selectByIdSet(params);
 
<select id="selectByIdSet" resultMap="BaseResultMap">  
     select  
     <include refid="Base_Column_List" />  
     from t_user where 
     name = #{name}
     and ID in  
     <foreach item="item" index="index" collection="idList" open="(" separator="," close=")">  
      #{item}  
     </foreach>  
</select>

---------------------------------------------------------------------------------------------------------

获取list对象一个属性,例如获取list对象GoodsResp01的属性comUid的set或者list

List<GoodsResp01> list = goodsService.selectGoodsInfoList(comName);

Set<Integer> collect = list.stream().map(GoodsResp01::getComUid).collect(Collectors.toSet());//去重

List<Integer> collectlist = list.stream().map(GoodsResp01::getComUid).collect(Collectors.toList());


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 Java中怎样根据对象list的某对象的属性进行分组 高效地根据属性名获取某对象的属性值 C# List按某对象的属性分组 IGrouping 获取List中对象的属性值 从List获取集合中对象的某个属性 java 从List中获取一个对象 java8 list转map,list集合中的元素的属性转set,list集合中对象的属性转list,list 排序,list分组,条件过滤 获取List集合对象中某一列属性值 C#,关于从List或Collection中找出对象的某个属性值与另一个list相同的全部对象 获取List中Map的属性值列表,获取所有map对象的某个属性列表
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM