0
点赞
收藏
分享

微信扫一扫

使用PageHelper查询后查询结果多了一个row_id


这个问题也提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>

再运行程序: 

使用PageHelper查询后查询结果多了一个row_id_构造函数

可以看到的确多出了一个Row_id。源码中的确也是这么处理的: 

使用PageHelper查询后查询结果多了一个row_id_SQL_02

最后根据作者的回复:

确实会多 row_id。构造函数这个如果你不是用的 ​​resultMap​​ 配置的构造参数方式,你就提供无参的默认构造方法。

举报

相关推荐

0 条评论