今天写mybatis的时候遇到一个问题轮饶了大半天,后来才发现自己犯了非常幼稚的错误,今天写了一个很简单的表,然后利用Mybatis的反向工具生成实体和BaseResultMap里面的字段,后来查询的时候,一直报错:Could not set property 'ID' of 'class cn.xxx.entity.vo.CrossVo' with value '1'
先看下生成后的实体:
@TableName("rg_cross")
@ApiModel(value = "路口表实体", description = "实体类")
public class Cross extends Model<Cross> {
private static final long serialVersionUID = 1L;
/**
* 路口主键id
*/
@TableId(value="ID", type= IdType.AUTO)
@ApiModelProperty(value = "路口主键id")
private Long id;
/**
* 路口名称
*/
@TableField("CROSS_NAME")
@ApiModelProperty(value = "路口名称")
@Length(min = 0, max =200, message = "路口名称长度不能超过200")
private String crossName;
/**
* 路口经度
*/
@TableField("LONGITUDE")
@ApiModelProperty(value = "路口经度")
@Length(min = 0, max =60, message = "路口经度长度不能超过60")
private String longitude;
/**
* 路口纬度
*/
@TableField("LATITUDE")
@ApiModelProperty(value = "路口纬度")
@Length(min = 0, max =60, message = "路口纬度长度不能超过60")
private String latitude;
/**
* 是否是重要路口 1:是 0:否
*/
@TableField("IS_IMPORTANT_ROAD")
@ApiModelProperty(value = "是否是重要路口 1:是 0:否")
private Integer isImportantRoad;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCrossName() {
return crossName;
}
public void setCrossName(String crossName) {
this.crossName = crossName;
}
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public Integer getIsImportantRoad() {
return isImportantRoad;
}
public void setIsImportantRoad(Integer isImportantRoad) {
this.isImportantRoad = isImportantRoad;
}
@Override
protected Serializable pkVal() {
return this.id;
}
@Override
public String toString() {
return "Cross{" +
", id=" + id +
", crossName=" + crossName +
", longitude=" + longitude +
", latitude=" + latitude +
", isImportantRoad=" + isImportantRoad +
"}";
}
}
再看我的BaseResultMap里面的字段
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="cn.xxx.entity.Cross">
<id column="ID" property="id" />
<result column="CROSS_NAME" property="crossName" />
<result column="LONGITUDE" property="longitude" />
<result column="LATITUDE" property="latitude" />
<result column="IS_IMPORTANT_ROAD" property="isImportantRoad" />
</resultMap>
再看我的查询语句:
<select id="selectPage" resultMap="BaseResultMap">
select rc.id,
rc.CROSS_NAME,
rc.LONGITUDE,
rc.LATITUDE,
rc.IS_IMPORTANT_ROAD
from rg_cross rc
<include refid="whereSql" />
limit ${from}, ${size}
</select>
正确的结果是这样的,
而我犯错的原因是没有BaseResultMap里面的 property跟我实体里面的小写一致,才导致这个错误。
注意点:BaseResultMap里面的 property的字段应该与实体中的字段保持一致