在开发中经常用到的一些sql语句,但相对比较复杂一些的

1.根据同一数据库内同一列的不同值进行查询,相同值的其他数据(mapper文件  type是列的属性值)
      select type,SUM(num) as num from ds_statistics
        <trim prefix="where" prefixOverrides="and|or">
            <if test="statistics.beginDate != null">
                and created_at>=#{statistics.beginDate}
            </if>
            <if test="statistics.endDate != null">
                <![CDATA[and created_at<=#{statistics.endDate}]]>
            </if>
        </trim>
        group by type
2.实现数据的批量删除(mapper文件)
  <delete id="batchDestory">
        delete from ds_goods where id in(
        <foreach collection="ids" item="id" index="index" separator=",">
            #{id}
        </foreach>
        )
    </delete>
3.实现数据的批量增加(mapper文件)
 dao文件对应的方法:batchInsert(@Param("list") List<OrderDetail> list, @Param("orderId") Long orderId);
 list对应的是下面的list,orderDetail对应的list的实体类
  <insert id="batchInsert">
        insert into ds_order_detail(goods_id, order_id, num, created_at, creator, updated_at, modifier) values
        <foreach collection="list" item="orderDetail" index="index" separator=",">
            (#{orderDetail.goods.id}, #{orderId}, #{orderDetail.num}, now(), #{orderDetail.creator}, now(),
            #{orderDetail.modifier})
        </foreach>
   </insert>
4.mybatis中使用in查询时注意事项
 1. 当查询的参数只有一个时 
    findByIds(List<Long> ids)
    1.a 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
    <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.b 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
   <select id="findByIdsMap" resultMap="BaseResultMap">
                 select
                 <include refid="Base_Column_List" />
          from jria where ID in
                  <foreach item="item" index="index" collection="array" 
                         open="(" separator="," close=")">
                        #{item}
                </foreach>
   </select>
 2. 当查询的参数有多个时,例如 findByIds(String name, Long[] ids)这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样  
    在collection属性可以指定名称,下面是一个示例
   Map<String, Object> params = new HashMap<String, Object>(2);
        params.put("name", name);
         params.put("ids", ids);
        mapper.findByIdsMap(params);
 
  <select id="findByIdsMap" resultMap="BaseResultMap">
                 select
                 <include refid="Base_Column_List" />
          from jria where ID in
                  <foreach item="item" index="index" collection="ids" 
                         open="(" separator="," close=")">
                        #{item}
                </foreach>
   </select>
 

猜你喜欢

转载自blog.csdn.net/cgt_0812/article/details/71515321