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);

    <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>


    <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使用名称.属性**进行使用即可

你可能感兴趣的:(mybatis,sql,java)