开发中遇到的坑

  1.  new ArrayList(.size())时确定list数量,指明list大小,但是确保()里的.size()不是null
    1. List<AuthPriorityDTO> result = new ArrayList<>(authPriorityDOList.size());

       

  2. 判断String类型的值是不是空时用StringUtils.hasText(String phone)
  3. 前端传过来String类型的值传给Service层或者mybatis时一定要做.trim()
    1.  //存储订单号
              if (StringUtils.hasText(rpcSelectCancelReasonAo.getOrderId().trim())) {
                  orderId.add(rpcSelectCancelReasonAo.getOrderId().trim());
              }

       

  4. 通过mybatis返回的是对象时做null判空处理,返回的是List时,一定不为空,做.size()为0的判断
  5. List list = new ArrayList();list一定不为null,但list.size()=0
  6. 前端传来List时,一定要做相应的去重处理,List<实体>有必要根据对应的字段去重,去重一般使用set去重或者jdk8的distinct()去重
  7. 写完接口,如有空余时间,先自己使用Spring Boot的Test做自测,部署到dev上的时候一定要查看控制台输出,确定部署的服务正确和部署成功,有事儿一定要找运维
  8. 和前端联调时一定要注意接口类型、字段名称、字段类型,保证少一个失误
  9. 接口中参数是数组时可以写成(数组的写法 String... phone)实际是String[] phone
  10. 在容易报错的地方加try catch
  11. 添加索引
    1. alter TABLE offlineuser ADD INDEX `idx_userPhone_userName_licenseNumber_callPhoneTime` ( `userPhone`, `userName`, `licenseNumber`, `callPhoneTime` )

       

  12. select <inclue refid = "">
    1.  select <include refid="Base_Column_List"/>
              from drivingdriver
              where driverNo = #{driverNo}

       

  13. 通用mapper批量查询in
    1. Example example = new Example(DrivingOrderDo.class);
              Integer[] unfinishedStatus = new Integer[]{OrderAttributeConst.ORDER_STATUS_DRIVERTAKEORDER
                      , OrderAttributeConst.ORDER_STATUS_SUCCESSAPPIONT
                      , OrderAttributeConst.ORDER_STATUS_CAROWNERWAITTING
                      , OrderAttributeConst.ORDER_STATUS_DRIVERREADY
                      , OrderAttributeConst.ORDER_STATUS_DRIVING};
      
              example.createCriteria().andEqualTo("driverId", userId).andIn("status", Arrays.asList(unfinishedStatus));
              return drivingOrderMapper.selectByExample(example);

       

  14. 复制实体的值到另一个对象用Clone()或者BeanUtils.copyProperties(source,target)【如果用的是Spring的,则前source后target】,copy时有可能出错,
    1. NoticeDO notice = noticeDTO.clone(NoticeDO.class);

       

  15. 获取当前时间用System.currentTimeMills()
    1.  Long currentTime = System.currentTimeMillis() / 1000;
              notice.setGmtCreate(currentTime);
              notice.setGmtModified(currentTime);

       

  16. 分页查询中mybatis动态sql中的模糊查询拼接
    1. <if test="title !=null ">
                  AND title like concat('%', #{title}, '%')
       </if>

       

  17. 动态sql中Date时间转成Long类型的时间戳进行时间比较
    1. <if test="noticeStatus==0">
                      AND startTime > UNIX_TIMESTAMP(now())
                  </if>
                  <if test="noticeStatus==1">
                      AND startTime &lt;= UNIX_TIMESTAMP(now())
                      AND expireTime >= UNIX_TIMESTAMP(now())
                  </if>
                  <if test="noticeStatus==2">
                      AND expireTime &lt; UNIX_TIMESTAMP(now())
        </if>

       

  18. 时间是Long类型时间戳,范围查询,通用mapper
    1.   Example example = new Example(DrivingOrderDo.class);
                  if (type == OrderAttributeConst.CAROWNER) {
                      example.createCriteria().andEqualTo("carOwnerId", carOwnerIdOrDriverId)
                              .andLessThan("createTime", createTime);
                  } else {
                      example.createCriteria().andEqualTo("driverId", carOwnerIdOrDriverId)
                              .andLessThan("createTime", createTime);
                  }

       

  19. 时间是Long类型的范围查询,用通用mapper
    1. Example example = new Example(DrivingOrderBillDo.class);
            example.createCriteria()
                .andBetween("payTime", rpcAo.getPayStartTime(), rpcAo.getPayEndTime());

       

  20. 多用Option.OfNullable()判空
    1. String driverOrgName = Optional.ofNullable(resolveDriverOrgName(rpcGetDrivingOrderListVo.getDriverOrganization())).orElse("--");

       

  21. 分页查询时,判断pageSize和currentPage是否为空,不为空设置默认的大小
  22. @Builder注解与通用mapper的连用
    1.  if (currentTime - noticeDO.getStartTime() > 0 && currentTime - noticeDO.getExpireTime() < 0) {
                  NoticeDO build = NoticeDO.builder().noticeStatus(operator).build();
                  Example example = new Example(NoticeDO.class);
                  example.createCriteria().andEqualTo("title", noticeDO.getTitle().trim());
                  this.noticeMapper.updateByExampleSelective(build, example);
                  this.clearCityNoticeCache(noticeDO.getProvinceCode(), noticeDO.getCityCode());
       }
      
      AuthPriorityDO priorityDO = authPriorityMapper.selectOne( AuthPriorityDO.builder().id(1L).build());
      
       noticeMapper.updateByPrimaryKeySelective(
                              NoticeDO.builder()
                                      .id(id)
                                      .expireTime(currentTime)
                                      .startTime(currentTime)
                                      .build());

       

  23. 多用@Builder注解创建对象
    1. NoticeDO noticeDO = noticeMapper.selectOne(
                      NoticeDO.builder()
                              .id(id)
                              .build());
              return noticeDO.clone(NoticeDTO.class);

       

  24. 分页查询,如果查询结果为空,则最好不要返回null,返回.size()=0的ArrayList()
    1.   Long carOwnerId = getCarOwnerIdByPhone(rpcAo.getUserPhone());
            if (carOwnerId == null || carOwnerId <= 0) {
              pageModel.setBody(new ArrayList<>());
              result = BaseResponse.returnResultSuccess(pageModel);
              return result;
            }
      

      纯属个人看,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值