学成在线day2学习心得

学成在线day2学习花费4天,主要内容是熟悉接口开发流程,以及解决接口开发过程中出现的一些问题,包括树形结构的数据库信息的查询整理算法,异常处理,httpClient等问题。涉及一些具体的代码包括lamdba表达式,分页查询等多次自己尝试实现,用时较久。下面理出学习心得

  1. 分页查询包括事先定义分页查询拦截器,设置数据库类型为mysql,然后处理出分页查询参数包装入page参数,准备queryWrapper,设置查询条件queryWrapper.like(item->!id.equal(item.getId()), CourseBase::getId, courseBaseDto.getId())等。熟悉分页查询代码
  2. 了解数据字典,作用于数字代码的映射,当某一个代码所对应的意义需要改变,只需改变数据字典即可,松耦合。另外,对于数据库,了解数据库存储引擎,数据库排序排序规则,数据库字符集。存储引擎包括InnDB, MyISAM一个是严格的强一致,ACID,另一个是不支持事务及行级锁定方便快速查询使用。
  3. httpClient插件的使用,可保存的,轻量级的提供接口测试功能。先对功能进行单元测试,再通过httpClient接口测试,最后是前后端联调。在http-client.env.json中配置方便改动的环境变量。
  4. 跨域请求,对待跨域请求的解决方案包括,使用js代码而不是axios框架,使用网关反向代理请求,服务器响应请求头Access-Allow-Controller-Origin: xxx。使用最后一种方案,在system工程中定义过滤器,对于指定路径,配置放行的路径,cookie,方法,原始头信息等。
  5. 对于树型表的查询,首先是数据库递归查询方法recursive。然后是service层中对于所有查询到的数据整理为有序的树形集合,使用算法一次遍历,每个元素寻找父节点,若是父节点是根节点,将此节点直接加入集合,反之,需要找到父节点,将本节点加入父节点中。注意stream()流使用list.stream().filter(item->!id.equal(item.getId()).collect(Collectors.toMap(key->key.getId(), value->value, (key1, key2)->key2)。
  6. 添加课程接口处理流程,对于两张表,基本思路是将数据拆分处理,分别插入两张表中,最后将数据查询出返回。注意开始的非空的合法性校验,对于代码的重用,另立方法。BaseMapper查询中userGenerateKeys属性应该是默认实现,base表和market表id一致,先插base,后得id,根据id再插market。其中使用的BeanUtils.copyProperties浅拷贝,对应属性拷贝,StringUtils.isEmpty(), StringUtils.isBlank(),后者对于空格,\t等字符也判断为空,前者只判断长度0和null。
  7. 对于异常处理,使用base工程中,自定义@ControllerAdvice增强类,commonError类(普通报错),RestResponseError类(与前端协商返回同一类型),XueChengPlusException类(自定义报错)。使用@ExceptionHandler(xxx.class)决定当前方法处理哪一类异常。@ResponseStatus指定返回状态码。在方法中向前端返回RestResponseError和输出日志。

总体来说就是这些,day2的学习时间较长,在一些细节上纠结过多,需要提高效率,调整作息,加快学习节奏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值