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
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、idCardMap<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等待超时