MyBatis 批量更新数据时,发现所有数据全部更新为最后一条数据了

问题描述:

数据集合中的数据没有问题,ID也不重复,数据都是没有问题的,问题就是调用方法后,总是把所有数据全部更新为集合中最后一条了,代码又很少,还出现这个问题,心塞! 查了不少资料都没有发现问题。

baseMapper.batchUpdateHisData(tblCollectdataDailyHisList);

最后,把数据库日志打开,看详细的sql语句,发现犯了一个 “要打自己耳光”的问题,

就是:java 实体Bean定义的ID数据类型为:Long型,而数据库ID定义的是Varchar类型,编译运行都是没有问题的。

但是,在做查询和更新的时候就有问题了,如下:

 

语句1:select * from tbl_collectdata_daily_his where id =1119096228680642561

能查询到所有数据

语句2:select * from tbl_collectdata_daily_his where id =“1119096228680642561”

只能查询一条数据.

分析到这里就水落石出了^_^

 

1.表结构,如下:

 

MyBatis 批量更新数据时,发现所有数据全部更新为最后一条数据了_第1张图片

表数据,如下:

MyBatis 批量更新数据时,发现所有数据全部更新为最后一条数据了_第2张图片

 

2.以下是Mapper.xml配置文件中批量更新数据的语句


    
        
            update tbl_collectdata_daily_his 
            
                
                    report_date = #{item.reportDate},
                

                
                    report_times = #{item.reportTimes},
                

                
                    temperature = #{item.temperature},
                

                
                    humidity = #{item.humidity},
                

                
                    electricity = #{item.electricity},
                

                
                    synstatus = #{item.synstatus},
                

            

            where id= #{item.id}
        

    

 

3.实体Bean对象,如下:

 

@TableName("tbl_collectdata_daily_his")
public class TblCollectdataDailyHis extends BaseDomain {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    /**
     * 租户ID
     */
    @TableField("domain_id")
    private String domainId;

    /**
     * imei设备ID
     */
    private String imei;

    /**
     * 上报时间
     */
    @TableField("report_date")
    private Date reportDate;

    /**
     * 上报次数
     */
    @TableField("report_times")
    private String reportTimes;

    /**
     * 预定时间,这个预定时间用于与采集时间进行对比并且进行计算来运用.
     */
    @TableField("preset_time")
    private Date presetTime;

    /**
     * 预定时间字符串:用于展示,如设备每隔30分钟上报一次,而一天是24个小时,则需要预先划分48个时段.
     */
    @TableField("preset_time_str")
    private String presetTimeStr;

...........................

public abstract class BaseDomain implements Serializable{
    private static final long serialVersionUID = -1604919010316594986L;
    
    @JsonSerialize(using=ToStringSerializer.class)
    @TableId(type = IdType.ID_WORKER)
    private Long id;
    
    public Long getId() {
        return id;
    }
    
    public void setId(Long id) {
        this.id = id;
    }
    
}

 

 

 

你可能感兴趣的:(MyBatis 批量更新数据时,发现所有数据全部更新为最后一条数据了)