日常开发规范

JAVA代码规范

项目命名:project-task

1、结构命名:
类—结尾处表明 Service \ PO\ Mapper\ xxxFactory

方法—头处表明:get list remove modify count

2、不要有魔法值,要自己定义 常量类,如—CacheConsts
2.1 一般定义 interface 接口,其中定义常量 默认为 public final static
3.1 命名规则,一般为大写+下划线命名

String DB_NAME = "local";

3、Object类之间的比较,使用Objects.equals

4、包装类比较全部使用equals 包括Integer

5、POJO中的类型强制使用包装类(int—>integer)

​ POJO类中不要设置任何默认值

6、【强制】不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator
方式,如果并发操作,需要对 Iterator 对象加锁。
如:

 List list = new ArrayList<>(); 
list.add("1"); 
list.add("2"); 
Iterator iterator = list.iterator(); 
while (iterator.hasNext()) { 
String item = iterator.next(); 
if (删除元素的条件) { 
iterator.remove(); 
} 
}
  1. 使用HashMap推荐 初始设置init值,如果不确定需要用到多少推荐16 new HashMap(16);
  2. 如果是 JDK8 的应用,可以使用 Instant 代替 Date,LocalDateTime 代替 Calendar,
    DateTimeFormatter 代替 SimpleDateFormat,官方给出的解释:simple beautiful strong
    immutable thread-safe。
  3. if(){}else{} 一定要避免3层,过高推荐其他方式。

注释规范

类、类属性、类方法必须使用/** **/ 枚举必须要有注释

接口规范

遵守restful风格
声明:@RequestMapping(“/pc/commodity”) == @RequestMapping(“pc/commodity”),两种写发是一致的,容器默认在启动时候,没有/ 路径会自动加上
类接口路径

@RestController
@RequestMapping("/pc/commodity")
public class CommodityController {
}

1、Get 单条推荐直接路径接参

	@GetMapping("{id}")
    public ResultResponse<CommodityVO> get(@PathVariable Long id) {
        return new ResultResponse<>(commodityService.get(id));
    }
  	//多条  
  	@GetMapping("list")
    public ResultResponse<PageInfo<CommodityVO>> list(CommodityQuery query) {
        PageInfo<CommodityVO> commodityPage = commodityService.list(query);
        return new ResultResponse<>(commodityPage);
    }

2、Post body传参,隐式传参

	@PostMapping
    public ResultResponse<?> save(@RequestBody CommodityForm form) {
        commodityService.save(form);
        return ResultResponse.SUCCESS;
    }

3、Put

@PutMapping("{id}")
    public ResultResponse<?> edit(@RequestBody CommodityForm form, @PathVariable Long id) {
        commodityService.edit(id, form);
        return ResultResponse.SUCCESS;
    }

4、Delete 推荐直接路径接参

	@DeleteMapping("{id}")
    public ResultResponse<?> remove(@PathVariable Long id) {
        commodityService.removeById(id);
        return ResultResponse.SUCCESS;
    }

5、其他接口,多个不可分割的单词,使用中划线拼接

	@PostMapping("commodity/check-code")
    public ResultResponse<PageInfo<CommodityVO>> checkCode(@RequestBody CommodityQuery query){
        PageInfo<CommodityVO> commodityPage = commodityService.list(query);
        return new ResultResponse<>(commodityPage);
    }

异常处理

NEP 防止NEP出现,方法体返回要注意判空 如 return Integer. Integer为Null 就会出现NEP 推荐使用Optional

1、try之后 不会异常回滚,注意手动!!!

2、异常不要全局的Excpetion要局部
3、异常要注意将报错信息和报错的对象打印出来。 log.error(e.getMessage(),e);

Mysql 规范

必备字段:id—bigint;gmt_create—datetime;gmt_update—datetime;flag—tinyint
表:业务_作用;apply_task

库:名字尽量和服务名一致

【推荐】:字段为了方便可以冗余一些,根据逻辑需要(不要太死板因为一个字段再去查询另一张表)

1、表示 是否的使用unsigned tinyint(1是0否) 推荐是is_xxx 但是这样就需要java进行转换,一般使用delete_flag

2、mysql中禁止出现任何大写,命名,不得使用复数命名

3、索引命名 主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。
说明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称。

4、小数类型使用decimal,可变串 varchar 不要过5000,如过长使用text

count() 和count(1)没有区别,官方也推荐了count().。 count(列名)不会统计null的。

count(列) 如果都null会返回 0,但是sum(列)都是null 会返回null,这时候就要注意NPE.

可以使用:SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table;

【强制】不要使用 = <>来比较可能为null的值。 因为Null值与其他任何值都会返回NULL

5、utf-8一般足够使用,utf-8mb4是一种扩展,如果存储表情再使用

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值