问题描述
xml内容如下
<select id="XXX" resultType="XXX.XX.AppResubscribeVO">
SELECT app.app_name,
app_id,
spec.spec_name,
...
实体类如下
@Data
@AllArgsConstructor
public class AppResubscribeVO
{
@ApiModelProperty(value = "应用名")
private String appName;
@ApiModelProperty(value = "规格名")
private String specName;
@ApiModelProperty(value = "应用ID")
private Integer appId;
...
如图,xml的字段(app_id,spec_name)和实体的字段(specName,appId)顺序不一致,且两个字段的类型也不一致,分别是String和Integer。此时又加了注解@AllArgsConstructor全参构造函数,则没有默认的无参构造函数。这种情况就会导致映射实体出错。
源码剖析
此问题的核心源码mybatisplus是
org.apache.ibatis.executor.resultset.DefaultResultSetHandler#createResultObject(ResultSetWrapper rsw, ResultMap resultMap, List<Class<?>> constructorArgTypes, List<Object> constructorArgs, String columnPrefix)
其他过程源码略
我们来看一下这个方法
private Object createResultObject(ResultSetWrapper rsw, ResultMap resultMap, List<Class<?>> constructorArgTypes, List<Object> constructorArgs, String columnPrefix)
throws SQLException {
final Class<?> resultType = resultMap.getType()