mybatis批量更新多个字段方法

mybatis因为没有级联保存,级联删除,批量处理方法,所以批量更新需要自己手写,综合网友的知识,(mysql)写法有三种

bean类:

@Entity
public class EvaScore extends BaseEntity {
	//考核项编码
	private String code;
	//考核项
	private String name;
	//得分
	private double score;
	//得分占比
	private double baifenbi;
	//单位类型
	private long unit_type;
	//任务编号
	private long taskid;
	//验收时间
	private Date checktime;
	//实际得分
	private double actscore;
	/**
	 * 考核项分配人员
	 */
	private long memberid;
	/**
	 * 考核项分类
	 */
	private String mgType;
	
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getScore() {
		return score;
	}
	public void setScore(double score) {
		this.score = score;
	}
	public double getBaifenbi() {
		return baifenbi;
	}
	public void setBaifenbi(double baifenbi) {
		this.baifenbi = baifenbi;
	}
	public long getUnit_type() {
		return unit_type;
	}
	public void setUnit_type(long unit_type) {
		this.unit_type = unit_type;
	}
	public long getTaskid() {
		return taskid;
	}
	public void setTaskid(long taskid) {
		this.taskid = taskid;
	}
	public Date getChecktime() {
		return checktime;
	}
	public void setChecktime(Date checktime) {
		this.checktime = checktime;
	}
	public double getActscore() {
		return actscore;
	}
	public void setActscore(double actscore) {
		this.actscore = actscore;
	}
	public long getMemberid() {
		return memberid;
	}
	public void setMemberid(long memberid) {
		this.memberid = memberid;
	}
	public String getMgType() {
		return mgType;
	}
	public void setMgType(String mgType) {
		this.mgType = mgType;
	}
	

}

接口:


public void batchUpdateEvaScores(@Param("list") List<EvaScore> list);
 
 

mapper:

<update id="batchUpdateEvaScores" parameterType="java.util.List">
		<!--方法一-->	
	<foreach collection="list" item="item" index="index" separator=";" open="" close="">
		update eva_score 
		<set>baifenbi=#{item.baifenbi},
			taskid=#{item.taskid},
			unit_type=#{item.unit_type}
		</set>
		where name=#{item.name} and mg_type=#{item.mgType}
	</foreach>
		<!-- 
         <!--方法二--> 
	   <foreach collection="list" separator=";" item="cus">  
	        update eva_score set  
	        baifenbi = #{cus.baifenbi},  
	        taskid = #{cus.taskid},  
	        unit_type = #{cus.unit_type}
	        where name=#{cus.name} and mg_type=#{cus.mgType}
	    </foreach>
	    
	<!-- 方法三 -->
	update eva_score
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="baifenbi =case" suffix="end,">
                 <foreach collection="list" item="item" index="index">
                     <if test="item.baifenbi !=null and item.baifenbi != -1">
                         when name=#{item.name} then #{item.baifenbi}
                     </if>
                     <if test="item.baifenbi == null or item.baifenbi == -1">
                         when name=#{item.name} then eva_score.baifenbi//原数据
                     </if>
                     
                     
                 </foreach>
            </trim>
            <trim prefix="baifenbi =case" suffix="end,">
                 <foreach collection="list" item="item" index="index">
                     <if test="item.taskid !=null and item.taskid != -1">
                         when name=#{item.name} then #{item.taskid}
                     </if>
                     <if test="item.taskid == null or item.taskid == -1">
                         when name=#{item.name} then eva_score.taskid//原数据
                     </if>
                 </foreach>
            </trim>
            <trim prefix="baifenbi =case" suffix="end,">
                 <foreach collection="list" item="item" index="index">
                     <if test="item.unit_type !=null and item.unit_type != -1">
                         when name=#{item.name} then #{item.unit_type}
                     </if>
                     <if test="item.unit_type == null or item.unit_type == -1">
                         when name=#{item.name} then eva_score.unit_type//原数据
                     </if>
                 </foreach>
            </trim>
        </trim>
        where name in
    	<foreach collection="list" index="index" item="item" 
        	separator="," open="(" close=")">
        	#{item.name}
    	</foreach>
	     --> 
	</update>
注意:当使用第一第二种写法时,需要给mysql配置批量执行,在spring.datasource.url后 加上allowMultiQueries=true
如 spring.datasource.url=jdbc:mysql://47.93.23.66:3306/db_smarte?allowMultiQueries=true

否则,将报错不能执行。





猜你喜欢

转载自blog.csdn.net/zwj1030711290/article/details/80319175