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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis-Plus是一个基于MyBatis的插件,提供了许多便捷的功能,包括自定义SQL查询分页功能。 要自定义SQL查询并进行分页,需要按照以下步骤进行: 1. 首先,在你的实体类上使用`@TableName`注解指定数据库表名。这是MyBatis-Plus的要求。 2. 在你的Mapper接口创建自定义SQL查询方法。例如,你可以创建一个方法叫做`selectCustomPage`,其SQL语句是你自己编写的。 ``` public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user WHERE age > #{age}") IPage<User> selectCustomPage(Page<User> page, int age); } ``` 3. 在你的Service调用Mapper自定义查询方法,并传入分页参数。 ``` @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> getCustomPage(int pageNum, int pageSize, int age) { Page<User> page = new Page<>(pageNum, pageSize); IPage<User> userPage = userMapper.selectCustomPage(page, age); return userPage; } } ``` 4. 在你的Controller调用Service方法,并将返回的分页对象转换成你想要的格式。 ``` @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping public ResultData getUsers(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize, @RequestParam int age) { IPage<User> userPage = userService.getCustomPage(pageNum, pageSize, age); List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); return new ResultData(userList, total); } } ``` 通过以上步骤,你就可以自定义SQL查询并进行分页了。注意,在自定义SQL语句,可以使用MyBatis的占位符`#{}`来接收参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值