由于之前在带有oracle系统中的服务没有写分页,想在带有mysql的服务直接将查出来的list塞到pageinfo中。
PageInfo<MemberSignInfo> pageinfo = new PageInfo<MemberSignInfo>
(memberSignInfoListResponse.getMemberSignInfoList());
想将其拷贝一下然后直接给一个size和page就完成假分页。谁知太年轻。直接给值没什么卵用。只能去修改远程的代码。
入参增加三个参数startpage起始页,endpage结束页,size每页数值。本来想原来代码里面应该有PageHelper,然后直接page.start直接完事。后来发现想多了啥也木的,项目太老不想动。
1.
mapper中输入输出参数都写map类型,不为别的就是不想多写类。
写一个Convert将Bean转换为map类型。然后搞个QueryBase别问我为啥,别人就是这样写的。这样写可以在mapper中调用方便,求出startRow和endRow
Map<String, Object> param = new HashMap<String, Object>(11);
QueryBase queryBase = new QueryBase();
int pageSize = 0;
int startRow = 0;
int endRow = 0;
if (memberSignPagination.getPageSize() != null) {
pageSize = xxxxPagination.getPageSize();
}
if (memberSignPagination.getStartPage() != null) {
startRow = pageSize * xxxxPagination.getStartPage();
}
if (memberSignPagination.getEndPage() != null) {
endRow = pageSize * xxxPagination.getEndPage();
}
queryBase.setStartRow(startRow);
queryBase.setEndRow(endRow);
param.put("queryBase", queryBase);
2.
Mapper书写先搞两个sql片段
<sql id="ORACLE_paginationStart">
<if test="queryBase.endRow != null and queryBase.startRow != null">
select * from (select row_.*, rownum rownum_ from (
</if>
</sql>
<sql id="ORACLE_paginationEnd">
<if test="queryBase.endRow != null and queryBase.startRow != null">
)row_
<if test="queryBase.endRow != null">
where rownum <= #{queryBase.endRow}
</if>
)
<if test="queryBase.startRow != null">
where rownum_ > #{queryBase.startRow}
</if>
</if>
</sql>
我觉得这个意思应该就是算出小于等于endRow的然后最后把startRow给切掉
然后在你写的mapper里面引入sql片段
<select id="xxxxxx" parameterType="java.util.Map" resultMap="BaseResultMap">
<include refid="xxxx"/>
select
<include refid="BaseColumn" />
from
TR_xxxxx t
<where>
.....
</where>
<include refid="xxxxxend"/>
</select>
第一页,startPage需要传入0,endPage1,size10就会达到分页效果。
顺手用逆向工程写一个mysql分页
看了一下自己的项目里面有几个很好用的东西看看吧
properties配置
# 分页插件
pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
dao层
PageHelper.startPage(pageNum,pageSize);
List<UserDo> userDos = userDOMapper.selectAll();
PageInfo orderDOPageInfo = new PageInfo(userDos);
startPage开始分页,pageinfo分页加总数获得