mybatis sql in 查询 mapper与service层写法

本文介绍了在MyBatis中进行IN查询时,如何在Mapper和Service层处理参数,特别是当参数为List或Array时的注意事项。通过示例展示了在XML映射文件中如何设置collection属性,并提到了当查询参数为多个时使用Map的重要性。
  1. 当查询的参数只有一个时
    findByIds(List ids)
    1.1 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list(要是Repository 层指定参数必须与参数一致)
    Xml代码 收藏代码
<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)
1.2 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array(要是Repository 层指定参数必须与参数一致)
Xml代码 收藏代码

<select id="findByIdsMap" resultMap="BaseResultMap">  
select  
<include refid="Base_Column_List" />  
from tabs where ID in  
<foreach item="item" index="index" collection="array" open="(" separator="," close=")">  
 #{item}  
</foreach>  
   </select>  
  1. 当查询的参数有多个时,例如 findByIds(String name, Long[] ids)
    这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样在collection属性可以指定名称
    下面是一个示例
    Map
<select id="findByIdsMap" resultMap="BaseResultMap">  
 select  
 <include refid="Base_Column_List" />  
 from tabs where ID in  
 <foreach item="item" index="index" collection="ids" open="(" separator="," close=")">  
  #{item}  
 </foreach>  
</select>  

下面看一下部分代码
讲的是当查询参数只有一个而且是List的情况我,我们用的最多

@Repository
public interface OrgnizationRepository {
    1. List<Orgnization> selectListIds(@Param("lists") List<Long> ids);

    2. List<Orgnization> selectListIds( List<Long> ids);
}
public interface OrgnizationService {
    public List<OrgnizationModel> selectListIds(List<Long> listLong);
}
@Service
public class OrgnizationServiceImpl implements OrgnizationService {

    @Autowired
    private BeanMapper beanMapper;

    @Autowired
    private OrgnizationRepository orgnizationRepo;
    @Override
    public List<OrgnizationModel> selectListIds(List<Long> ids) {
        List<Orgnization> list = orgnizationRepo.selectListIds(ids);
        return beanMapper.mapAsList(list, OrgnizationModel.class);
    }
}
public class OrgnizationServiceImplTest extends BaseTest {

    @Autowired
    OrgnizationService orgnizationService;

    @Test
    public void testSelectListIds() {
        List<Long> list = new ArrayList<>();
        list.add(Long.valueOf("633465951"));
        list.add(Long.valueOf("633465952"));
        List<OrgnizationModel> selectListIds =         orgnizationService.selectListIds(list);
    }
}

 <select id="selectListIds" resultMap="BaseResultMap">
   select
     1. <include refid="Base_Column_List"/> 
      from orgnization where is_deleted = 0 and orgn_id in 
      <foreach item="item" index="index" collection="lists" open="(" separator="," close=")">  
          #{item}  
      </foreach>  
  </select>

   <select id="selectListIds" resultMap="BaseResultMap">2.必须list
   select
    2.  <include refid="Base_Column_List"/> 
      from orgnization where is_deleted = 0 and orgn_id in 
      <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
          #{item}  
      </foreach>  
  </select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值