mybatis-plus 通过QueryWrapper使用注解@Select自定义left join等复杂SQL用于分页

原创 创建时间:2019-10-11 访问量:8280 赞:1 踩:0

mybatis是一款非常好用的DAO层框架,使用非常灵活,加上二次开发的mybatis-plus框架简直就是福音,赞不绝口!

我们在使用mybatis-plus时可以轻松使用它的QueryWrapper构建查询条件,并接SQL,非常方便,如果遇到注解@Select自定义left join等复杂SQL,也可以轻松搞定。

只需要的Mapper接口中使用@Select注意定义接口方法即可,形式如下:

public interface CheckRecordMapper extends BaseMapper<CheckRecordEntity> {

    /**
     * 使用@Select注解,将SQL的where条件部分用${ew.customSqlSegment}代替
     */
    @Select("select * from (SELECT min(id) as id, user_id, count(1) as sign_count, " +
            "min(create_time) as sign_time, sum(flag) as flag " +
            "FROM `t_app_check_record` where date = date(now()) " +
            "group by user_id) t ${ew.customSqlSegment}")
    List<CheckRecordEntity>getNeedSignOffUserCheckRecord(
            @Param(Constants.WRAPPER) Wrapper wrapper);

}

使用@Select注解,将SQL的where条件部分用${ew.customSqlSegment}代替,参数使用@Param(Constants.WRAPPER) Wrapper wrapper,这里面的Constants.WRAPPER就是ew哦。这样定义的注解方法就可以使用QueryWrapper构造条件并且可以轻松使用mybatis-plus 的 IPage进行分页,是不是很灵活,是HI!

Service层调用也很简单:

    @Override
    public void handleCheckRecordBatchAndSendRemindMessage() {
        QueryWrapper<CheckRecordEntity> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("t.sign_count", "1")
                .ge("timestampdiff(HOUR, t.sign_time, now())", "5")
                .apply("(t.flag is null or t.flag = 0)");
        List<CheckRecordEntity> list = this.getBaseMapper().getNeedSignOffUserCheckRecord(queryWrapper);
    }

分页的道现也是一样。

评论
 我想说:
==已经到底了==
关注: 粉丝: 积分:
工联信息网
如有问题请致邮箱:need@glxxw2018.com(仅限本站无法查询到的资料);本站能够查询到的资料请关注“工联信息网”公众号,通过页面提供的资源码查询!
不良信息反馈及侵权投诉建议请致邮箱:accusation@glxxw2018.com