0
点赞
收藏
分享

微信扫一扫

【mybatis-plus系列】mybatis-plus整理总结



博客目录

  • 1.判断参数为空
  • 1.1.在配置文件中加上全局配置
  • 1.2.对某一字段单独进行判断非空
  • 1.3.空值处理
  • 2.list 查询
  • 3.更新操作
  • 4.删除操作
  • 5.关于 null 的处理
  • 6.查询操作
  • 6.1.普通查询
  • 6.2.批量查询
  • 6.3.条件查询
  • 6.4.非空筛选
  • 6.5.排序
  • 6.6.insql 包含
  • 6.7.或者关系
  • 6.8.年龄范围
  • 6.9.王姓
  • 6.10.年龄在数组
  • 6.11.limit
  • 6.12.只取需要字段
  • 6.13.不取字段
  • 6.14.不为空
  • 6.15.实体为参数
  • 6.16.AllEq 用法
  • 6.17.排除不要的情况
  • 6.18.selectMaps
  • 6.19.having
  • 6.20.selectObjs
  • 6.21.selectCount
  • 6.22.selectOne
  • 6.23.使用 Lambda
  • 6.24.使用 Lambda,名字为王姓
  • 6.25.实际应用
  • 6.26.wrapper 的 and 查询
  • 6.27.条件判断
  • 7.mybatis-plus 参数注解


1.判断参数为空

1.1.在配置文件中加上全局配置

mybatis-plus.global-config.db-config.field-strategy=not_empty

1.2.对某一字段单独进行判断非空

QueryWrapper<BillCust> queryWrapper = new QueryWrapper<BillCust>(BeanUtil.mapToBean(params, BillCust.class, false));
queryWrapper.lambda().eq(ObjectUtils.isNotEmpty(params.get("erpCustomerName")), BillCust::getErpCustomerName, params.get("erpCustomerName"));

1.3.空值处理

//mybatis-plus关于null的处理
/**
* 空值的情况,不会执行
*/
@Test
public void update() {
  String carNumber = null;
  accessControlSystemCarInfoMapper.update(new AccessControlSystemCarInfo(), Wrappers.<AccessControlSystemCarInfo>lambdaUpdate()
                                          .set(AccessControlSystemCarInfo::getSecondWeight, new BigDecimal(50))
                                          .eq(AccessControlSystemCarInfo::getCarNumber, null)
                                         );
}

/**
      * 空值的情况,会执行
      */
@Test
public void update1() {
  accessControlSystemCarInfoMapper.update(new AccessControlSystemCarInfo(), Wrappers.<AccessControlSystemCarInfo>lambdaUpdate()
                                          .set(AccessControlSystemCarInfo::getSecondWeight, new BigDecimal(50))
                                          .isNull(AccessControlSystemCarInfo::getCarNumber)
                                         );
}

2.list 查询

List<StoreCapacity> storeCapacities = storeCapacityService.list(new LambdaQueryWrapper<StoreCapacity>()
                                                                .eq(StoreCapacity::getBaseId, storeCapacityQueryVo.getBaseId())
                                                                .eq(StoreCapacity::getDeliveryMode, deliveryMode)
                                                                .eq(StoreCapacity::getPeriodDay, DateUtil.beginOfDay(storeCapacityQueryVo.getPeriodDay()))
                                                                .orderByAsc(StoreCapacity::getPeriodArrange)
                                                               );

3.更新操作

shipmentOrderDetailMapper.update(new ShipmentOrderDetail(), Wrappers.<ShipmentOrderDetail>lambdaUpdate()
                                 .set(ShipmentOrderDetail::getDealerConfirm, DealerConfirmEnum.NOT_CONFIRM.getType())
                                 .in(ShipmentOrderDetail::getId, ids)
                                );

4.删除操作

shipmentOrderMapper.delete(Wrappers.<ShipmentOrder>lambdaQuery()
                        .eq(ShipmentOrder::getId, id));

5.关于 null 的处理

/**
     * 空值的情况,不会执行
     */
    @Test
    public void update() {
        String carNumber = null;
        accessControlSystemCarInfoMapper.update(new AccessControlSystemCarInfo(), Wrappers.<AccessControlSystemCarInfo>lambdaUpdate()
                .set(AccessControlSystemCarInfo::getSecondWeight, new BigDecimal(50))
                .eq(AccessControlSystemCarInfo::getCarNumber, null)
        );
    }

    /**
     * 空值的情况,会执行
     */
    @Test
    public void update1() {
        accessControlSystemCarInfoMapper.update(new AccessControlSystemCarInfo(), Wrappers.<AccessControlSystemCarInfo>lambdaUpdate()
                .set(AccessControlSystemCarInfo::getSecondWeight, new BigDecimal(50))
                .isNull(AccessControlSystemCarInfo::getCarNumber)
        );
    }

6.查询操作

6.1.普通查询

/**
 * 普通查询
 */
@Test
public void selectById() {
    UserInfo userInfo = userInfoMapper.selectById(123);
    System.out.println(userInfo);
}

6.2.批量查询

/**
 * 批量查询
 */
@Test
public void selectByIds() {
    List<Long> ids = Arrays.asList(123L,124L,125L);
    List<UserInfo> userInfo = userInfoMapper.selectBatchIds(ids);
    System.out.println(userInfo);
}

6.3.条件查询

/**
 * 名字包含娟并且年龄小于30
 */
@Test
public void selectByWrapper() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.like("username","娟").lt("age",30);
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.4.非空筛选

/**
 * 名字包含娟并且年龄大雨等于20且小于等于40并且email不为空
 */
@Test
public void selectByWrapper2() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.like("username","娟").between("age",20,30).isNotNull("email");
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.5.排序

/**
 * 名字姓肖或者年量大雨等于20,按照年龄降序排列,年龄相同按照id生序排列
 */
@Test
public void selectByWrapper3() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.likeRight("username","肖")
            .or().ge("age",20).orderByDesc("age").orderByAsc("id");
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.6.insql 包含

/**
 * 创建日期为2019年10月2日并且直属上级名字为王姓
 */
@Test
public void selectByWrapper4() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.apply("date_format(create_time,'%Y-%m-%d')={0}","2019-10-07")
            .inSql("parent_id","select id from user where username like '王%'");
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.7.或者关系

/**
 * 名字为王姓并且(年龄小于40或邮箱不为空)
 */
@Test
public void selectByWrapper5() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.likeRight("username","王")
            .and(wq->wq.lt("age",40))
            .or().isNotNull("email");
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.8.年龄范围

/**
 * 名字为王姓并且(年龄小于40并且大与20或邮箱不为空)
 */
@Test
public void selectByWrapper6() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.likeRight("username","王")
            .and(wq->wq.lt("age",40).gt("age",20))
            .or().isNotNull("email");
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.9.王姓

/**
 * (年龄小于40或邮箱不为空)名字为王姓
 */
@Test
public void selectByWrapper7() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.nested(wq->wq.lt("age",40))
            .or().isNotNull("email")
            .likeRight("username","王");
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.10.年龄在数组

/**
 * 年龄23,30,40
 */
@Test
public void selectByWrapper8() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.in("age",Arrays.asList(20,30,40));
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.11.limit

/**
 * 只返回满足条件的其中一条语句即可
 */
@Test
public void selectByWrapper9() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.in("age",Arrays.asList(20,30,40)).last("limit 1");
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.12.只取需要字段

/**
 * 名字中包含雨并且年龄小于40(只取id,username)
 */
@Test
public void selectByWrapper10() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.select("id","username").like("username","雨").lt("age",40);
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.13.不取字段

/**
 * 名字中包含雨并且年龄小于40(不取create_time,parent_id两个字段,即不列出全部字段)
 */
@Test
public void selectByWrapper11() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.like("username","雨").lt("age",40)
                .select(UserInfo.class,info->!info.getColumn().equals("create_time")&&
                        !info.getColumn().equals("parent_id"));
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.14.不为空

/**
 * 姓名和邮箱不为空
 */
public void testCondition() {
    String username = "王";
    String email = "";
    condition(username,email);
}

private void condition(String username,String email){
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.like(StringUtils.isNullOrEmpty(username),"name",username)
                .like(StringUtils.isNullOrEmpty(email),"email",email);
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.15.实体为参数

/**
 * 实体作为条件构造器方法的参数
 */
@Test
public void selectByWrapperEntity() {
    UserInfo whereUser = new UserInfo();
    whereUser.setUsername("xiaojuan");
    whereUser.setAge(22);
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>(whereUser);
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.16.AllEq 用法

/**
 * AllEq用法
 */
@Test
public void selectByWrapperAllEq() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("nuserame","xiaojuan");
    params.put("age",null);
    queryWrapper.allEq(params);
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.17.排除不要的情况

/**
 * AllEq用法(排除不是条件的字段)
 */
@Test
public void selectByWrapperAllEq2() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("nuserame","xiaojuan");
    params.put("age",null);
    queryWrapper.allEq((k,v)->!k.equals("name"),params);
    List<UserInfo> userInfoList = userInfoMapper.selectList(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.18.selectMaps

/**
 * selectMaps
 */
@Test
public void selectByWrapperMaps() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.like("name","肖").lt("age",40);
    List<Map<String,Object>> userInfoList = userInfoMapper.selectMaps(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.19.having

/**
 * 按照直属上级分组,查询每组的平均年龄,最大年龄,最小年龄。并且只取年龄总和小于500的组
 */
@Test
public void selectByWrapperMaps2() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.select("avg(age) avg_age","min(min) min_age","max(age) max_age")
            .groupBy("parent_id").having("sum(age)<{0}",500);
    List<Map<String,Object>> userInfoList = userInfoMapper.selectMaps(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.20.selectObjs

/**
 * selectObjs
 */
@Test
public void selectByWrapperObjs() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.select("id","name").like("name","肖").lt("age",40);
    List<Object> userInfoList = userInfoMapper.selectObjs(queryWrapper);
    userInfoList.forEach(System.out::println);
}

6.21.selectCount

/**
 * selectCount
 */
@Test
public void selectByWrapperCount() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.like("name","肖").lt("age",40);
    Integer count = userInfoMapper.selectCount(queryWrapper);
    System.out.println(count);
}

6.22.selectOne

/**
 * selectOne
 */
@Test
public void selectByWrapperSelectOne() {
    QueryWrapper<UserInfo> queryWrapper = new QueryWrapper<UserInfo>();
    queryWrapper.like("name","肖").lt("age",40);
    UserInfo user = userInfoMapper.selectOne(queryWrapper);
    System.out.println(user);
}

6.23.使用 Lambda

/**
 * 使用Lambda
 */
@Test
public void selectLambda() {
   // LambdaQueryWrapper<UserInfo> lambda = new QueryWrapper<UserInfo>().lambda();
    LambdaQueryWrapper<UserInfo> lambda = new LambdaQueryWrapper<UserInfo>();
    lambda.like(UserInfo::getUsername,"娟").lt(UserInfo::getAge,40);
    List<UserInfo> userInfoList = userInfoMapper.selectList(lambda);
    userInfoList.forEach(System.out::println);
}

/**
 * 使用Lambda链式
 */
@Test
public void selectLambd3() {
    List<UserInfo> userInfoList = new LambdaQueryChainWrapper<UserInfo>(userInfoMapper)
            .like(UserInfo::getUsername,"娟").ge(UserInfo::getAge,20).list();
    userInfoList.forEach(System.out::println);
}

6.24.使用 Lambda,名字为王姓

/**
 * 使用Lambda,名字为王姓(年龄小于40或邮箱不为空)
 */
@Test
public void selectLambd2() {
    LambdaQueryWrapper<UserInfo> lambda = new LambdaQueryWrapper<UserInfo>();
    lambda.like(UserInfo::getUsername,"娟")
            .and(lqw->lqw.lt(UserInfo::getAge,40).or().isNotNull(UserInfo::getEmail));
    List<UserInfo> userInfoList = userInfoMapper.selectList(lambda);
    userInfoList.forEach(System.out::println);
}

6.25.实际应用

@Override
public List<ShipmentOrderDto> getShipmentOrdersByIds(List<String> ids) {
  if (CollectionUtils.isEmpty(ids)) {
    throw new JeecgBootException(ResultEnum.REQUEST_PARAM_ERROR.getDesc());
  }
  List<ShipmentOrder> shipmentOrders = shipmentOrderMapper.selectList(Wrappers.<ShipmentOrder>lambdaQuery()
                                                                      .in(ShipmentOrder::getTrainNumber, ids)
                                                                     );
  List<ShipmentOrderDto> orderDtoList = new ArrayList<>();
  if (CollectionUtils.isNotEmpty(shipmentOrders)) {
    orderDtoList = shipmentOrders.stream().map(item -> {
      ShipmentOrderDto orderCheckDTO = new ShipmentOrderDto();
      BeanUtils.copyProperties(item, orderCheckDTO);
      return orderCheckDTO;
    }).collect(Collectors.toList());
  }
  return orderDtoList;
}

6.26.wrapper 的 and 查询

wrapper.and(i ->
 i.like(ExtensionOrder::getProjectNo, projectSearch).or()
 .like(ExtensionOrder::getProjectName, projectSearch));

 LambdaQueryWrapper<ExtensionMisson> wrapper = Wrappers.lambdaQuery();
  wrapper.and(i ->
                    i.like(ExtensionMisson::getSupplierName, supplierSearch).or()
                             .like(ExtensionMisson::getSupplierNo, supplierSearch));

6.27.条件判断

IPage<BaseDeliveryAreaManagement> pageList = baseDeliveryAreaManagementService.page(page, new LambdaQueryWrapper<BaseDeliveryAreaManagement>()
      .eq(StringUtils.isNotBlank(storeAreaQueryVo.getBaseCode()),BaseDeliveryAreaManagement::getBaseCode, storeAreaQueryVo.getBaseCode())
        .eq(StringUtils.isNotBlank(storeAreaQueryVo.getNature()),BaseDeliveryAreaManagement::getNature,storeAreaQueryVo.getNature())
        .eq(StringUtils.isNotBlank(storeAreaQueryVo.getStatus()),BaseDeliveryAreaManagement::getStatus,storeAreaQueryVo.getStatus())
        .eq(StringUtils.isNotBlank(storeAreaQueryVo.getType()),BaseDeliveryAreaManagement::getType,storeAreaQueryVo.getType())
        .eq(BaseDeliveryAreaManagement::getDelFlag,0));

7.mybatis-plus 参数注解

@TableField(value = "cus_user_id")  // @TableField(exist = true):表示该属性为数据库表字段。
 private Integer cusUserId;
 @TableField(exist = false) // 表示该属性不为数据库表字段,但又是必须使用的。
 private Integer deptId;
 @TableField(fill = FieldFill.INSERT)
 @TableField(fill = FieldFill.INSERT_UPDATE)

觉得有用的话点个赞 👍🏻 呗。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

【mybatis-plus系列】mybatis-plus整理总结_开发语言_02


举报

相关推荐

0 条评论