MybatisPlus-特殊用法整理

泄露秘密 提交于 2020-11-18 10:22:02

多层嵌套查询

@Test
    public void test1(){
   
   
        QueryWrapper<User> queryWrapper=new QueryWrapper<>();
        queryWrapper.select(User.ID);
        String param="admin";
        queryWrapper.eq(User.SEX, 0);
        queryWrapper.and(Objects.nonNull(param), wrapper -> {
   
   
            wrapper.like(User.NAME, param);
            wrapper.or().like(User.ACCOUNT, param);
            return wrapper;
        });
        List<User> userList = userMapper.selectList(queryWrapper);
        System.out.println(JSON.toJSONString(userList));
    }

打印的SQL

: ==>  Preparing: SELECT id FROM t_system_user WHERE sex = ? AND ( name LIKE ? OR account LIKE ? ) 
: ==> Parameters: 0(Integer), %admin%(String), %admin%(String)
: <==      Total: 2

不写sql执行数学运算

            UpdateWrapper<User> updateWrapper = new UpdateWrapper();
            String setSql = String.format("%s = %s + %d", User.HIT_NUM, User.HIT_NUM, 1);
            updateWrapper.in(User.ID, id)
                    .lambda().setSql(setSql);
            mindLabelService.update(updateWrapper);

碰到前端设置时间为空,要求更新到数据,安装正常情况下,mybatis-plus只会更新不为空的数据,可以设置TableField注解的updateStrategy值为IGNORED,但是比较危险,所有使用这个pojo的位置都会受到影响,比如我现在只更新a字段,pojo中b字段则为null,那样的设置就会更新b。比较保守的方式如下:

    @PostMapping("/editTest")
    public Object editTest(@RequestBody InspectReviewPlanDO inspectReviewPlanDO) throws ParseException {
   
   
        System.out.println(JSON.toJSONString(inspectReviewPlanDO));
        //日期类型的字段,前端传"",映射到后台为null,使用updateById是不能更新的。
        // 字符串类型的字段,前端传"",映射到后台为"",使用updateById是能更新的。
        LambdaUpdateWrapper<InspectReviewPlanDO> wrapper = new LambdaUpdateWrapper<>();
        //将那些为null,但是需要更新到db的使用set方法设置一下即可。
        wrapper.set(InspectReviewPlanDO::getInspectBeginTime,inspectReviewPlanDO.getInspectBeginTime());
        wrapper.eq(InspectReviewPlanDO::getId,inspectReviewPlanDO.getId());
        inspectReviewPlanMapper.update(inspectReviewPlanDO,wrapper);
        //inspectReviewPlanMapper.updateById(inspectReviewPlanDO);
        return inspectReviewPlanDO;
    }

参考:
https://blog.csdn.net/lsqingfeng/article/details/106411954
https://blog.csdn.net/qq_39403545/article/details/85334250
https://blog.csdn.net/xiaoxiong_blog/article/details/107186168


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!