mybatis学习之路-批量插入和删除,查找

最近再做项目时,为了优化性能,对以前的SQL语句做了优化,主要是批量增加和删除,下面就把我研究的结果写出来做记录和以后参考

   1,批量增加

    批量增加常用的是一个Foreach循环,但是我们也可以再SQL中进行双重Foreach循环

Dao层接口

boolean insertBatchOrgApps(@Param("orgids")List<String> orgids,@Param("appids")List<String> appids,@Param("spid")String spid);
<insert id="insertBatchOrgApps">
   insert into org_apps(orgid,appid,spid) values
   <foreach collection="appids" item="appid" separator=",">  
   <foreach collection="orgids" item="item" separator=",">  
         (#{item},#{appid},#{spid})  
     </foreach>  
    </foreach>  
</insert>
2,批量删除

  批量删除 就是IN关键字和Foreach组合使用

int deleteBatchOrgAppsBySpidAndAppidAndOrgid(@Param("spid")String spid,@Param("appids")List<String> appids,@Param("orgids")List<String> orgids);

<delete id="deleteBatchOrgAppsBySpidAndAppidAndOrgid">
   delete from  org_apps  where  spid=#{spid} and
   appid in 
   <foreach collection="appids" index="i" item="appid" open="(" separator="," close=")">   
              #{appid}   
    </foreach>
     and orgid in
   <foreach collection="orgids" index="index" item="orgid" open="(" separator="," close=")">   
              #{orgid}   
    </foreach>
</delete>
3,批量查找

批量查找就是传入的条件也是多个,并且是集合

 List<Map<String,Object>> findAppUseCountGroupByDepartment(@Param("departmentDns")List<String> departmentDns,@Param("spid")String spid);


<select id="findAppUseCountGroupByDepartment"  resultType="java.util.HashMap">
   select orgid,count(DISTINCT a.appid)c from org_apps  a INNER JOIN app_info b on a.appid=b.appid
   <where>
      <if test="spid!=null and spid!=''">
              and a.spid=#{spid}
           </if>
           
           <if test="departmentDns!=null and departmentDns.size()>0">
               and a.orgid in
         <foreach collection="departmentDns" index="index" item="item" open="(" separator="," close=")">   
              #{item}   
          </foreach>
           </if>
   </where>
   <!-- binary  区分大小写 -->
    GROUP BY binary orgid 
</select>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值