记录工作中遇见问题、学习项

1、判空操作

Demo demo= Optional
         .ofNullable(demoService.getById(id))
         .orElseThrow(() -> new ServiceException("不存在id为" + id + "的数据"));

2、SQL方面

  1、group by :

        GROUP BY 子句必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前。在 GROUP BY 子句中,你可以对一列或者多列进行分组,但是被分组的列必须存在于列清单中(即你要分组的字段,必须在你group by的字段的那个表中)

3、日期处理

1、LocalDateTime

Hutool 中有时间处理工具类

4、BigDecimal

推荐使用String类型的数据,用BigDecimal.valueOf()转换为BigDecimal形式,进行计算。

5、@Builder

放在类、构造函数或构造方法上

在类上要加@Builder @AllArgsConstructor @NoArgsConstructor

例如Student.bulider().age(23).name("cs").bulid();

6、StringJoiner类

在构造字符串时,可以自动添加前缀、后缀及分隔符,而不需要自己去实现这些添加字符的逻辑。

7、Map集合入参

需求:以key、value形式入参查询数据库

代码:动态传person类中的参数查询数据库,注意Map的key、value都可能为空,需去除两者中为空的查询条件。

    public List<PersonRpc> getPersonByParams(Map<String, Object> params) {
        // 1、判断传参是否与Person中属性匹配
        Map<String, Field> personFields = ReflectUtil.getFieldMap(Person.class);

        // 2、传参的格式问题处理,id_card、idCard
        Map<String, Object> matchingParams = params.entrySet().stream()
                .filter(entry -> personFields.containsKey(entry.getKey()) && entry.getValue() != null)
                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

        List<PersonRpc> personRpcs = CollectionUtil.newArrayList();

        if (CollectionUtil.isNotEmpty(matchingParams)) {
            // 3、根据入参查询数据
            QueryWrapper<Person> queryWrapper = new QueryWrapper<>();
            queryWrapper.and(wrapper -> {
                for (Map.Entry<String, Object> entry : matchingParams.entrySet()) {
                    wrapper.or().eq(entry.getKey(), entry.getValue());
                }
            });

            List<Person> persons = personMapper.selectList(queryWrapper);
            personRpcs = BeanUtil.copyToList(persons, PersonRpc.class);
        }

        return personRpcs;
    }

8、liquibase 等待超时问题

原因1:数据库加锁造成

解决方法:databasechangeloglock 表中设置locked为false,lockgrented、lockedby设置为Null

原因2:数据库连接问题

工作遇见:使用一体化集成平台打包时,ip映射错了,造成liquibase等待超时

9、怎样实现动态配置定时任务

10、springboot 插件化

此处需了解插件化和微服务的区别

11、aop返回void造成所有接口返回为空

public void logAspect(JoinPoint joinPoint) 

12、流的使用

13、线程池

案例easyexcel引入线程池实现大数据量批量导入

项目git地址:毕设_医院管理系统: spring boot + mybatis-plus

效果图(测试数据量300条):

1、未引入线程池

2、引入线程池

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值