项目概括
加入项目时间:2021/2/26
退出项目时间:2021/3/31
项目内容: 1. 系统整合,功能完善
2. 数据迁移
3. 双系统 app做成 安卓和IOS
4. 同时做成小程序及公众号
5. 后台管理做成
项目后端技术支持:
注册中心:Nacos 1.2.0
微服务框架:SpringCloud Greenwich.RELEASE
网关组件:SpringCloud Gateway
开发框架:SpringBoot 2.1.1.RELEASE
安全框架:Shiro + JWT
ORM 框架:Mybatis-plus 3.1.0
缓存框架:Redis
连接池:Druid 1.1.19
日志框架:Logback+Slf4j
运行容器:Tomcat
部署:Docker、Docker-compose
项目担当内容:实现接口
技术弯路
一. DB问题
1. mapper.java文件和mapper.xml文件的文件名称要保持一致。
2. 返回page时要传入初始化page的current和pagesize。
// ServiceImpl.java
Page<A> page = this.baseMapper.selProduct(new Page<>(current, pageSize));
// mapper.java
Page<A> selProduct(IPage<A> page);
3. Mybatis动态SQL知识点
//1.foreach
tableName.dealer_id IN
<foreach collection="list" open="(" close=")" separator=","
item="list" index="i">
#{list}
</foreach>
collection: (入参)
- 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
- 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
- 如果User有属性List ids。入参是User对象,那么这个collection = “ids”.
- 如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = “ids.id”,该参数为必选。
item:集合中元素迭代时的别名,该参数为必选。
index:在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选
//2.if
<if test="endDate != null and endDate != '' ">
AND DATE_FORMAT(a.create_time, '%Y-%m-%d %H:%i:%s') < = #{endDate}
</if>
test属性:非null和非空的判断,判空时是单引号
日期的格式化 :DATE_FORMAT(a.create_time, ‘%Y-%m-%d %H:%i:%s’)
日期的早晚于限制: 早于 > ,晚于<
//3.模糊查询
a.goods_name LIKE concat ( '%' ,#{searchText}, '%')
3. 数据获取的方式的选定
当页面是大量数据的浏览和筛选画面时,就老实使用SQL抓取数据吧。当只是获取某个值的单一数据抓取时就考虑用条件构造器QueryWrapper来实现。
二. 前后台连接问题
1. POST和GET的选择
入参如果是@RequestBody Dto dto 就选择POST,入参如果是@RequestParameter选择GET比较好。
前后台的传参方式要一致不然容易产生传值无效的状态。
入参如果是@RequestBody 和@RequestParameter同时存在用POST也可以实现但不推荐同时使用这两个注解。
2.HTTP400
前后台联通报400,多半是参数的类型和个数有出入。以及入参出参的DTO里参数的类型和是否存在的问题。
三. 数据的组织方式
1. List
2. Map
3. Page
4. 流Stream
- stream().filter
- 用来处理null的情况
//1.orElse 有,就用自身值。 为null,就用orElse后面的值。
Optional.ofNullable("正品").orElse("替代品")
//2.orElseGet 它可以传入一个supplier接口,里面可以花样实现逻辑
System.out.println(Optional.ofNullable("宝马").orElseGet(()->"走路")); // 有宝马就不用走路
//3.orElseThrow 不满足前一个条件就抛异常
try {
System.out.println(Optional.ofNullable("钱").orElseThrow(()->new Exception()));
// 有钱不会抛异常
} catch (Throwable throwable) {
throwable.printStackTrace();
}
5. StringBuffer的append()方法
定义可变长度的字符串的类型
//打印出helloworld
StringBuffer stringBuffer = new StringBuffer("hello");
stringBuffer.append("world");
6. @Component注解的用法
@component (把普通pojo实例化到spring容器中,相当于配置文件中的)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
7. reduce
四. 逻辑构思问题
业务弯路
一定要在自己的脑子里形成一个完善的业务流并去跟业务人员确认包括整个处理的数据流的完整闭环
再去制造会是事半功倍
沟通弯路
花费太多时间的东西一定要果断发问,自己要先清楚问题的关键点和想要得到的回答
个人弯路
转入新的部门,在24小时健康守护项目初尝代码作业之后,进入了本部门的开发团队,可以说是”双新“的局面,新的作业内容,开发作业,新的团队成员,第三事业部,从佳文那早有耳闻的奇怪团队。
入项目以来,初次作战的各种弊端无一避免的显露出来。虽然前期重新看过java的全部基础知识,前一个项目也小有尝试,单是开发的前一两天依然很是奔溃,精神过度的紧张导致睡意和食欲全无。理智告诉我身体垮了一切都白搭,于是我大晚上回去强把饭菜塞进嘴里,也就吃了下去这才没有中途倒下。每天回去很晚就简单洗漱睡觉,上下班就尽量打车,毕竟身体处在一个紧绷和虚弱的状态尽量减少其他的劳累。后期晚上回去还会调查一下今日为解决的课题到很晚,这样也起到了很好的效果,第二天问题就迎刃而解了。这个操作以后可以提前到业务理解,在弄清楚逻辑写法的时候就对需要用的知识点进行调查,做到胸有成竹。