这个问题也提Issue了。
先简单描述下问题:
tk.Mybatis版本3.3.8;PageHelper版本4.1.6。 XML中SQL:
<select id="getTagQuery" resultType="com.xx.TagQuery">
SELECT TAG_ID tagId,TAG_NAME tagName from BDATAG_TAG
</select>
TagQuery属性名称与别名一致:
public class TagQuery {
private String tagName;
private String tagId;
....
public TagQuery(String tagName, String tagId) {
this.tagName = tagName;
this.tagId = tagId;
}
}
运行代码如下:
PageHelper.startPage(page.getPageNum(), page.getPageSize());
List<TagQuery> list = twoScenesMapper.getXXQuery(orgId, tagTypeCode);
PageInfo pageInfo = new PageInfo(list);
代码运行后会出现异常,主要信息如下,显示没有符合要求的构造:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.test.TagQuery matching [java.lang.String, java.lang.String, java.math.BigDecimal]
执行SQL如下:
DEBUG getTagQuery.debug - ==> Preparing: select * from ( select tmp_page.*, rownum row_id from ( SELECT TAG_ID tagId,TAG_NAME tagName from BDATAG_TAG ) tmp_page where rownum <= ? ) where row_id > ?
2018-11-08 10:38:12.265 [http-apr-18005-exec-3] DEBUG getTagQuery.debug - ==> Parameters: 10(Integer), 0(Integer)
因为这里使用了select * ,所以在返回结果的时候会携带着后面的row_id。为了进一步证实,可以将返回Query对象改成HashMap:
<select id="getTagQuery" resultType="hashmap">
SELECT TAG_ID tagId,TAG_NAME tagName from BDATAG_TAG
</select>
再运行程序:
可以看到的确多出了一个Row_id。源码中的确也是这么处理的:
最后根据作者的回复:
确实会多 row_id。构造函数这个如果你不是用的 resultMap
配置的构造参数方式,你就提供无参的默认构造方法。