MybatisPlus自定义对象查询和分页方法
记录一下自己实践的过程,方便以后查找使用
Dao层:
/**
* 使用自定义对象进行分页获取
* @param page
* @param wrapper
* @return
* Constants.WRAPPER="ew"
*/
Page<ItemMemberVo> selectPageVo(Page<ItemMember> page,
@Param(Constants.WRAPPER) Wrapper<ItemMember> wrapper);
/**
* 获取自定义对象
* @param id
* @return
*/
ItemMemberVo getById(Serializable id);
<!--获取分页信息vo-->
<select id="selectPageVo"
resultType="com.wiki.item.entity.vo.ItemMemberVo">
select m.*,j.job_name
from item_member m
left join item_job j
on m.job_id=j.id and j.del_flag='0'
where m.del_flag='0'
<if test="ew != null">
<if test="ew.nonEmptyOfWhere">
AND
</if>
${ew.sqlSegment}
</if>
</select>
<!-- 获取单条信息vo-->
<select id="getById"
resultType="com.wiki.item.entity.vo.ItemMemberVo">
select m.*,j.job_name
from item_member m
left join item_job j on m.job_id=j.id and j.del_flag='0'
where m.del_flag ='0' and m.id=${id}
</select>
注意点:
1、事先准备好ResultMap层,方便返回值的获取
2、ew.sqlSegment是传参的wrapper的sql语句,ew.customSqlSegment则是WHERE + sql语句
3、方法的返回值为IPage对象,只有这样,在使用时,查询出来的结果才会自动赋值给IPage对象。
4、如果返回类型是 IPage 则入参的 IPage 不能为null,因为 返回的IPage == 入参的IPage;
如果想临时不分页,可以在初始化IPage时size参数传 <0 的值;
如果返回类型是 List 则入参的 IPage 可以为 null(为 null 则不分页),但需要你手动 入参的IPage.setRecords(返回的 List);
如果 xml 需要从 page 里取值,需要 page.属性 获取
5、生成 countSql 会在 left join 的表不参与 where 条件的情况下,把 left join 优化掉
所以建议任何带有 left join 的sql,都写标准sql,即给于表一个别名,字段也要 别名.字段
6、如果有传入其他参数,建议在传参那里写上**@Param(“名称”),然后xml使用名称.属性**进行使用即可
版权声明:本文为u011746120原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。