2024-01-09:更新
-1. 数据库对象不能加默认值,直接用mybatis查询的话会多了where条件。
-
日志tag一定要细分,怎么打日志,怎么方便查询问题,99.99%可能用不到这些日志,一但出问题,没有日志,就没法定位问题,有日志可以甩锅,避免很多扯皮!
-
提交代码的时候要仔细审核
-
变量名要驼峰处理,要规范
-
接口注释要简单易懂
-
mapper中数据库的字段要用resultmap处理,别直接用字段名,使用
-
controller层中接口参数用req, service层中接受controller层的参数用dto,service返回给controller用bo
-
日期格式处理用org.apache.commons.lang3.time.DateFormatUtils 别用其他的,注意包名
-
判断代码是否提交,可以去git里面看,https://cfgitlab.cfmoto.com:8443/java/uip,切到自己的分支,
-
代码提交的时候一定要先拉取,遇到冲突先解决冲突, 合并代码,再提交,不要等出现重大线上事故再后悔
-
代码提交的时候要格式化,可以在提交代码这里勾选这个reformat,这样也会提交代码自动格式化
-
controller层不要抛出异常,raise err,那样不就把错误传给用户了吗, 在service层处理,用try catch
-
代码在用到的时候再去new,别new 了,过了好几十行也没用到,
-
字符串判空别用 “” null, 用StringUtils.isBlank(sign)
-
写代码的时间永远是最少的,最快的,70%的时间设计,20%的时间调试, 10%的时间写代码
-
善于利用idea工具,善于使用DBG,
-
在设计前,设计时要多于前端,测试,设计沟通,避免之后出现返工的情况
-
result如果没有返回值的,不需要返回String,直接返回Result即可 ,无须泛型,也不用返回ResultCode, 这样代码会简洁很多
-
所有的int都用Integer类型,包括出参和入参
-
所有的校验如果不通过,一定要返回错误的Result,还不是直接return null,这样前端会当做成功处理(访客系统提交预约传入参数校验),如果只是校验错误,前端只需要弹出错误提示,就直接写错误文案,不需要定义code,如
Result.buildErrorResult("人数不能为空");
-
这种重复代码调用的不能写,应该加一个变量接收,特别是调用
service
层, 不能为省一行代码,而直接写到一起,涉及到数据库的操作,调用多次那太可怕了 -
只有一个参数的情况下,就不要用对象传递,一般参数 >3个才用对象
-
每个接口的参数对象如果差别很多,不要共用一个对象,这里主要指前端传到
controller
层, -
所有的类型字段,状态字段,如果值超过2个,需要加枚举对象,不要直接写1,2,3,都不知道代表什么意思,以后如果多加一个枚举值,或者修改一个枚举值,代码都不知道要改多少处
-
多个写操作的语句,需要加事务
-
不要直接导入类,要直接用类名. 不然代码可读性太差了,一眼不知道方法在哪里写的
-
代码中尽量不要有时间复杂度太高的操作,比如双重for循环,时间复杂度n^2, 数据量一大,耗时严重
-
在
service
层尽管返回result,但是controller
层也不能不接受,在controller
直接返回void
,那样即使service
层返回Result
,但是依然无响应体 -
这种简单判空,不需要加通用errCode,下面那个状态不匹配要加一个通用errcode,不应会出现错误文案,相当于前端bug或者恶意篡改才会触发的就不用加通用errCode
-
改完的无用代码记得删除,即使内存不是自己家的也不能这么玩
-
错误的文案一定要多想一下,不能就直接写一个评价失败,评价错误,这些错误文案一定要让用户一眼就明白,不然他们还会找到技术看日志看代码才能定位问题,浪费很多时间,交互也不友好,这个错误文案很重要,一定要多思考,不要随便返回一个文案,在互联网公司,这一个文案可能别人就直接把公司告到倒闭
-
不能直接 sql里面写 state=1 type=1 这种,sql里面的值也要通过参数传递进来
-
前端没法直接传枚举对象,接口接收还是用Integer,只不过一般需要校验下前端传的1,2,3 是否再枚举值当中,有可能枚举值只有1,2,3前端传了4,这时候校验不在枚举对象中就报错了,说明前端bug或者恶意篡改
-
多个写操作,加事务,在写操作之前的判断,不需要进行抛出异常方式回滚,下面才是写语句,这种校验就直接return error即可,如果上面有写语句,下面需要回滚,才用抛出异常方式回滚
-
这种String类型的查询判断,如果前端传了空字符,可能就不生效了,需要加上 条件 != ”
如:,但是insert的时候也不需要加,即使设置的NotNull, 也没有设置default,在插入的时候也会有默认值 -
查询类的不需要加上这个注解,只有写操作,或者有敏感操作才加
加了这个操作就代表要存入数据库记录,如果查询也加上,那记录太多了 -
数据库的注释和接口返回的,不一定要一样,数据库的注释和接口返回的,不一定要一样,接口的注释,是接口返回值的注释
-
方法命名一定小写开头,驼峰处理
-
不要图简单,方便,要理解封装、继承、多态,很多设计都是基于这三大特性
-
是一块逻辑的话不要把代码拆分开来,需要写在一起
-
解决的TODO记得删掉
-
PO是数据库类,不能随便改动,要改动的话复制到BO层,再改
-
springboot获取yaml配置,不要用@Envirment env.getProperty()来获取,用springboot注入的方式来获取,@Value(“${spring.profiles.active}”)
private String profiles; -
不用的代码记得删掉,不然越来越多,都不敢删
-
代码如果没有service层的其他处理没必要定义一个BO,直接用PO就行
-
0.5小时提醒是钉钉日程自带的, 不是定时任务触发的
-
crud,除了update ,select很多方法可以公用,除非有些select很特殊,比如 用 != 或者不能共用参数对象的
-
批量删除增加,用
select,和delete 直接 in(?,?)
, 写法类似这种或,不要把foreach
写在insert || delete
外层 -
判断字符串不为空,用
Strings.isNotBlank()
,别用!Strings.isBlank()
-
param.getRecDesc().length() > 100
不要直接判断,这样会直接空指针,先判空在进行判断长度 -
从 0.1.0开始往上加 0.1.1, 最后一位是修bug的版本, 第二位是 小版本迭代, 第一位是大版本
-
字段名要记得加注释
-
私有方法最好也加上注释
-
/** */用在方法和接口上
-
lambda是java8除了g1垃圾回收器之外最重要的特性
-
循环里面不要涉及到与其他控件(数据库,mq,外部应用之类的)交互,尽量一次性批量
查询,网络通信是很耗时的,单个查询可能会忽略不计,在循环里面查询就会很慢 -
两个下拉选框,第一个选择之后带出第二个,可以在第一个接口把全部关系数据返回,让前端处理,网络连接是很耗时的,每次选择都要调用接口,是很耗时的。