1. 程式人生 > >mysql和Mapper中批量更新資料寫法

mysql和Mapper中批量更新資料寫法

  • mapper寫法:
<update id="updateOrderStateByOrderId" parameterType="java.util.List">
   update t_replace_order set
   Forder_state =
   <foreach collection="list" item="item" index="index" separator=" " open="case Forder_id" close="end">
      when #{item.orderId,jdbcType=BIGINT} then #{item.orderState,jdbcType=INTEGER}
   </foreach>
   ,Forder_state_desc =
   <foreach collection="list" item="item" index="index" separator=" " open="case Forder_id" close="end">
      when #{item.orderId,jdbcType=BIGINT} then #{item.orderStateDesc,jdbcType=VARCHAR}
   </foreach>
   ,Fmodify_time=
   <foreach collection="list" item="item" index="index" separator=" " open="case Forder_id" close="end">
      when #{item.orderId,jdbcType=BIGINT} then #{item.modifyTime,jdbcType=TIMESTAMP}
   </foreach>
   where Forder_id in
   <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
      #{item.orderId,jdbcType=BIGINT}
   </foreach>
</update>

    //這句sql的意思是,更新Forder_state欄位,如果Forder_id=#{item.orderId,jdbcType=BIGINT} 則Forder_state的值為 

    //#{item.orderState,jdbcType=INTEGER}更多Forder_id和需要更新的欄位就以此類推 

  • dao介面
//Map中key對應mysql中取值欄位,Map中value對應取值欄位的值,把map看做一個bean更加好理解
Integer updateOrderStateByOrderId(@Param("list")List<Bean> list);
  • 邏輯呼叫

     List<Bean> list = //Bean集合
     //批量更新
     Integer num =  updateOrderStateByOrderId(list);
  • 對應mysql中寫法:
UPDATE ticket_db.t_replace_order 
SET Forder_state =
CASE
    Forder_id 
    WHEN '1' THEN
    0 
    WHEN '2' THEN
    2 
    WHEN '3' THEN
    1 
END 
WHERE
    Forder_id IN ( '1', '2', '3' ) 

 

    //這句sql的意思是,更新Forder_state欄位,如果Forder_id=1 則Forder_state的值為0,
    //如果Forder_id=2 則dingdan的值為2,如果Forder_id=3 則Forder_state的值為1,更多Forder_id就以此類推

批量插入

 int insertMore(List<Fenci> record);


<insert id="insertMore" parameterType="java.util.List">
    insert into t_fenci ( Fword, Ftype,
    Fto_id, Flocation, Fnum,
    Fword_type,Fstart_offset, Fend_offset,
    Fcreate_time, Fmodify_time)
    values
    <foreach collection ="list" item="reddemCode" index= "index" separator =",">
      (
      #{reddemCode.word}, #{reddemCode.type},
      #{reddemCode.toId},
      #{reddemCode.location},
      #{reddemCode.num}, #{reddemCode.wordType},#{reddemCode.startOffset},#{reddemCode.endOffset},
      #{reddemCode.createTime},#{reddemCode.modifyTime}
      )
    </foreach >
  </insert>