mybatis批量插入和批量修改

1.背景 

   批量插入和批量修改在項目使用的場景越來越多,能實現批量操作的插件也越來越多。

 個人瞭解到的大致有三種:

插件名稱 批量插入 批量修改
mybatis  √ √  
通用mapper     √ ×
mybatis  plus    √

 

 

 

 

 

2. mybatils批量插入和修改

2.1  pom.xml

		<dependency>
	  	   	 <groupId>org.mybatis</groupId>
	  	     <artifactId>mybatis</artifactId>
	  		 <version>3.4.4</version>
	  	</dependency>
	  	<dependency>
	  		<groupId>org.mybatis</groupId>
	  	  	<artifactId>mybatis-spring</artifactId>
	  		<version>1.3.1</version>
	  	</dependency>

關於配置就不過闡述,可查看歷史博客查看mybatils如何配置。 

2.2 dao類

package com.cloudtech.web.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.cloudtech.web.entity.StationTiming;
import com.cloudtech.web.vo.StationTimingVo;

import tk.mybatis.mapper.common.Mapper;

public interface StationTimingMapper extends Mapper<StationTiming> {

	/**
	 * 批量插入
	 * 
	 * @param insertLsit
	 */
	void batchInsert(@Param("list") ArrayList<StationTiming> list);

	/**
	 * 批量修改
	 * 
	 * @param updateList
	 */
	void batchUpdate(@Param("list") List<StationTiming> list);
}

extends Mapper<StationTiming> 的原因是,使用了通用mapper,而通用mapper沒有批量修改操作,所以,使用的mybatis批量插入和修改的方式。

2.2 mapper類

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cloudtech.web.dao.StationTimingMapper">
		<!-- 批量插入站點校時信息 -->
	<insert id="batchInsert" parameterType="java.util.List">
    			insert into station_timing
    			(station_id,send_time,status,create_time)
    			values
    			<foreach collection="list" item="item" index="index" separator=",">
    				(	
    					#{item.stationId},
    					#{item.sendTime},
    					#{item.status},
    					now()
    				)
    		     </foreach>		
    </insert> 
	

	 <update id="batchUpdate" parameterType="java.util.List">
            update station_timing
            <trim prefix="set" suffixOverrides=",">
              <trim prefix="send_time=case" suffix="end,">
                 <foreach collection="list" item="item" index="index">
                         <if test="item.sendTime!=null">
                          when id=#{item.id} then #{item.sendTime}
                         </if>
                 </foreach>
              </trim>
              <trim prefix="status =case" suffix="end,">
                 <foreach collection="list" item="item" index="index">
                         <if test="item.status!=null">
                          when id=#{item.id} then #{item.status}
                         </if>
                 </foreach>
              </trim>
             </trim>
            where
            <foreach collection="list" separator="or" item="item" index="index">
              id=#{item.id}
          </foreach>
	</update>
</mapper>
foreach標籤描述
屬性 描述
collection

表示迭代集合的名稱,可以使用@Param註解指定,記住dao類的傳參一定要增加@Param

必填 

item 需要輸出的元素,如爲List,則爲對象,必填
index 當天迭代修改索引位置,選填
separator 迭代需要追加的內容,選填
open 迭代sql以什麼開頭
close 迭代sql以什麼結尾

2.3  實體類

package com.cloudtech.web.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Transient;

public class StationTiming implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@Column
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Integer id;

	private Integer stationId;
	@Transient
	private String number;

	private Date responseTime;

	private String replyContent;

	private Integer status;

	private Date createTime;

	private Date sendTime;

	public Date getSendTime() {
		return sendTime;
	}

	public void setSendTime(Date sendTime) {
		this.sendTime = sendTime;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public Integer getStationId() {
		return stationId;
	}

	public void setStationId(Integer stationId) {
		this.stationId = stationId;
	}

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}

	public Date getResponseTime() {
		return responseTime;
	}

	public void setResponseTime(Date responseTime) {
		this.responseTime = responseTime;
	}

	public String getReplyContent() {
		return replyContent;
	}

	public void setReplyContent(String replyContent) {
		this.replyContent = replyContent;
	}

	public Integer getStatus() {
		return status;
	}

	public void setStatus(Integer status) {
		this.status = status;
	}

	public Date getCreateTime() {
		return createTime;
	}

	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}

}

如果你熱衷技術,喜歡交流,歡迎加入我們! 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章