Charles7c
|
241a9cf85b
|
refactor: 使用 DatePattern 中的日期格式常量替代字符串常量中的日期格式
|
2023-08-10 23:38:20 +08:00 |
|
Charles7c
|
b1c0ac1998
|
Merge branch '1.0.x' into dev
|
2023-04-13 22:32:11 +08:00 |
|
Charles7c
|
efbcb9b39d
|
style: 优化业务实现注释
|
2023-04-13 22:29:53 +08:00 |
|
Charles7c
|
6bb15d782e
|
Merge branch '1.0.x' into dev
# Conflicts:
# README.md
|
2023-04-03 21:34:42 +08:00 |
|
Charles7c
|
48de2e85e0
|
style: 优化部分 Properties 用法
|
2023-03-31 22:16:49 +08:00 |
|
Charles7c
|
51a82d8f4e
|
升级:升级后端依赖
1.Spring Boot 2.7.8 => 2.7.10
2.Redisson 3.19.0 => 2.20.0
3.Easy Excel 3.2.0 => 3.2.1
4.Knife4j 4.0.0 => 4.1.0(此版本已内置了 springdoc-openapi-ui 依赖)
5.Hutool 5.8.11 => 5.8.16
|
2023-03-27 21:22:14 +08:00 |
|
Charles7c
|
405d40e19d
|
release: v1.0.0
|
2023-03-26 21:10:30 +08:00 |
|
Charles7c
|
c5b748fe52
|
完善:发版前配置梳理
|
2023-03-24 00:40:49 +08:00 |
|
Charles7c
|
8591a24730
|
优化:优化跨域配置,可支持配置允许跨域的具体域名或 *
|
2023-03-23 19:54:15 +08:00 |
|
Charles7c
|
fb0effed9a
|
新增:新增角色数据权限功能(基于 MyBatis Plus DataPermissionInterceptor 插件实现)
1.基于 MyBatis Plus DataPermissionInterceptor 插件实现的数据权限功能
2.通过在指定 Mapper 接口层方法添加 @DataPermission 注解实现数据权限
|
2023-03-07 23:55:24 +08:00 |
|
Charles7c
|
8823211fd9
|
优化:基于阿里巴巴 Java 开发手册(黄山版)优化 Jackson 超大整数配置
1.编程规约>前后端规约>第6条:
【强制】对于需要使用超大整数的场景,服务端一律使用 String 字符串类型返回,禁止使用 Long 类型。
说明:Java 服务端如果直接返回 Long 整型数据给前端,Javascript 会自动转换为 Number 类型(注:此类型为双精度浮点数,表示原理与取值范围等同于 Java 中的 Double)。Long 类型能表示的最大值是 263-1,在取值范围之内,超过 253(9007199254740992)的数值转化为Javascript 的 Number 时,有些数值会产生精度损失。
扩展说明,在 Long 取值范围内,任何 2 的指数次的整数都是绝对不会存在精度损失的,所以说精度损失是一个概率问题。若浮点数尾数位与指数位空间不限,则可以精确表示任何整数,但很不幸,双精度浮点数的尾数位只有 52 位。
反例:通常在订单号或交易号大于等于 16 位,大概率会出现前后端订单数据不一致的情况。比如,后端传输的 "orderId":362909601374617692,前端拿到的值却是:362909601374617660
|
2023-03-05 19:31:02 +08:00 |
|
Charles7c
|
39f267699a
|
优化:优化成员变量相关注释及部分操作写法
成员变量有时候会被称为 Field 有时候会被称为 Property,它们的区别如下:
1.Field:Field 是 Java 反射中描述类的属性信息的类。成员变量(Instance Variable)就是定义的字段(Field),例如 private String name;。Field 可以获取当前对象的成员变量的类型,对成员变量重新设值等。使用 Field 可以直接操作类的属性,不需要通过 getter 和 setter 方法,但是需要了解反射机制。
2.Property:Property 是成员变量的 getter 和 setter 方法。例如,public String getName() { return name; } 和 public void setName(String name) { this.name = name; } 分别是获取和设置 MyField 类中的实例变量 name 的 getter 和 setter 方法。使用 Property 可以在类的外部访问和修改类的属性,但是需要注意访问权限和数据类型的正确性。
综上所述,Field 和 Property 都可以用来表示 Java 类中的成员变量,选择哪种方式取决于具体的应用场景和需求。如果需要直接操作类的属性,可以使用 Field;如果需要在类的外部访问和修改类的属性,可以使用 Property。
个人理解:从 MyBatis 的映射角度来说,column 表示数据库表列/字段,property 表示 Java 对象属性/字段,所以此前在涉及到 MyBatis 操作时,尽可能多的用了 Property 而不是 Field。但除了 MyBatis 之外还有很多地方也需要用到成员变量,与其纠结 Field 还是 Property,那就用 Field,简单粗暴一点。
|
2023-03-05 12:59:10 +08:00 |
|
Charles7c
|
25f6e3402b
|
优化:优化使用 MyBatis Plus ChainWrapper 的方式
|
2023-03-04 17:38:10 +08:00 |
|
Charles7c
|
89a327920e
|
优化:基于阿里巴巴 Java 开发手册(黄山版)优化常量
1.编程规约>常量定义>第1条:
【强制】不允许任何魔法值(即未经预先定义的常量)直接出现在代码中。
|
2023-03-04 14:35:45 +08:00 |
|
Charles7c
|
4779d77265
|
优化:基于阿里巴巴 Java 开发手册(黄山版)优化方法排序及访问权限修饰符
1.编程规约>OOP规约>第20条:
【推荐】当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起,便于阅读,
此条规则优先于下一条。
2.编程规约>OOP规约>第21条:
【推荐】类内方法定义的顺序依次是:公有方法或保护方法 > 私有方法 > getter / setter 方法。
说明:公有方法是类的调用者和维护者最关心的方法,首屏展示最好;保护方法虽然只是子类关心,也可能是“模板设
计模式”下的核心方法;而私有方法外部一般不需要特别关心,是一个黑盒实现;因为承载的信息价值较低,所有
Service 和 DAO 的 getter / setter 方法放在类体最后。
3.编程规约>OOP规约>第26条:
【推荐】类成员与方法访问控制从严:
1)如果不允许外部直接通过 new 来创建对象,那么构造方法必须是 private。
2)工具类不允许有 public 或 default 构造方法。
3)类非 static 成员变量并且与子类共享,必须是 protected。
4)类非 static 成员变量并且仅在本类使用,必须是 private。
5)类 static 成员变量如果仅在本类使用,必须是 private。
6)若是 static 成员变量,考虑是否为 final。
7)类成员方法只供类内部调用,必须是 private。
8)类成员方法只对继承类公开,那么限制为 protected。
说明:任何类、方法、参数、变量,严控访问范围。过于宽泛的访问范围,不利于模块解耦。思考:如果是一个
private 的方法,想删除就删除,可是一个 public 的 service 成员方法或成员变量,删除一下,不得手心冒点汗吗?
变量像自己的小孩,尽量在自己的视线内,变量作用域太大,无限制的到处跑,那么你会担心的。
|
2023-03-04 10:41:43 +08:00 |
|
Charles7c
|
dc751fc3ec
|
优化:基于阿里巴巴 Java 开发手册(黄山版)优化部分方法使用
1.编程规约>OOP规约>第12条:
【强制】禁止使用构造方法 BigDecimal(double) 的方式把 double 值转化为 BigDecimal 对象。
说明:BigDecimal(double) 存在精度损失风险,在精确计算或值比较的场景中可能会导致业务逻辑异常。
如:BigDecimal g = new BigDecimal(0.1F);实际的存储值为:0.100000001490116119384765625
正例:优先推荐入参为 String 的构造方法,或使用 BigDecimal 的 valueOf 方法,此方法内部其实执行了 Double 的
toString,而 Double 的 toString 按 double 的实际能表达的精度对尾数进行了截断。
BigDecimal recommend1 = new BigDecimal("0.1");
BigDecimal recommend2 = BigDecimal.valueOf(0.1);
2.编程规约>OOP规约>第19条:
【推荐】使用索引访问用 String 的 split 方法得到的数组时,需做最后一个分隔符后有无内容的检查,
否则会有抛 IndexOutOfBoundsException 的风险。
说明:
String str = "a,b,c,,";
String[] ary = str.split(",");
// 预期大于 3,结果等于 3
System.out.println(ary.length);
|
2023-03-03 23:14:15 +08:00 |
|
Charles7c
|
a79b3e0e96
|
新增:新增公共查询枚举字典 API,优化前端获取枚举数据的方式
|
2023-02-26 21:49:03 +08:00 |
|
Charles7c
|
142d315a8d
|
优化:MyBatis Plus 新增防全表更新与删除插件配置
|
2023-02-11 22:56:13 +08:00 |
|
Charles7c
|
ebc7c2b3b0
|
优化:基于 ESLint 和阿里编码规约插件对部分代码规范进行优化
|
2023-02-10 20:45:15 +08:00 |
|
Charles7c
|
ceba8e9e53
|
新增:新增系统管理/部门管理/导出功能(引入 Easy Excel 依赖用于导出 Excel,详情可见 README 介绍。另请注意:测试导出功能时,前端需要关闭 mockjs,否则 responseType 会被 mockjs 设置为 '',导致导出的文件无法打开)
|
2023-02-06 23:02:23 +08:00 |
|
Charles7c
|
21fe29b56f
|
优化:优化日志表结构(新增 module 所属模块字段);优化日志引擎部分代码;使用 defaultIfNull() 和 blankToDefault 替换部分三元运算符代码(便于阅读及理解);将 BaseEntity 重命名为 BaseDO
|
2023-01-31 20:29:48 +08:00 |
|
Charles7c
|
1837047a9e
|
修复:🔥 修复重写 RequestMappingHandlerMapping 后,日志拦截器等失效的问题
|
2023-01-30 23:06:22 +08:00 |
|
Charles7c
|
d7851bc811
|
重构:初步封装后端 CRUD 公共组件(BaseController、BaseService、BaseServiceImpl)
|
2023-01-29 23:40:29 +08:00 |
|
Charles7c
|
8b82557883
|
新增:新增修改邮箱功能,并优化部分以往代码(引入 spring-boot-starter-mail 用于发送邮件验证码)
|
2023-01-14 01:05:39 +08:00 |
|
Charles7c
|
76fb698a37
|
新增:新增修改基础信息 API(优化 Jackson 针对通用枚举接口 IEnum 的序列化和反序列化)
|
2023-01-09 22:41:09 +08:00 |
|
Charles7c
|
5252c54c48
|
新增:新增上传头像 API,采用本地存储方式存储头像
|
2023-01-05 22:32:23 +08:00 |
|
Charles7c
|
21f5aceccf
|
优化:使用枚举存储性别、状态等信息(采用 MyBatis Plus#通用枚举扩展),常量类则专注于存储全局变量,例如:缓存键、默认值等
|
2023-01-02 00:19:56 +08:00 |
|
Charles7c
|
1d21019813
|
修复:解决 Jackson2ObjectMapperBuilderCustomizer 配置不生效的问题,同时优化所有 Date 类型为对应 Java 8 日期、时间类型
|
2022-12-29 21:48:50 +08:00 |
|
Charles7c
|
d9a48f7a95
|
修复:修复生产环境报 java.lang.NoClassDefFoundError: org/springframework/data/redis/connection/zset/Tuple 的错误问题(移除 Sa-Token 集成 Redis 依赖,改为本地 Redis 适配 SaTokenDao)
|
2022-12-28 23:32:05 +08:00 |
|
Charles7c
|
6a7ad96fa3
|
优化:优化跨域配置
|
2022-12-26 23:23:33 +08:00 |
|
Charles7c
|
727850933f
|
新增:新增系统监控模块(存放系统监控模块相关功能,例如:日志管理、服务监控等),新增操作日志引擎,记录 HTTP 请求信息
|
2022-12-25 13:16:15 +08:00 |
|
Charles7c
|
78e84e8941
|
完善:完善用户登录 API,优化部分包结构(引入 MyBatis Plus、多数据源、P6Spy、Liquibase 等依赖,详情可见 README 介绍)
|
2022-12-25 12:35:35 +08:00 |
|
Charles7c
|
00e2b44d0e
|
新增:新增用户登录和退出 API(引入 Sa-Token 依赖,详情可见 README 介绍)
|
2022-12-22 19:39:27 +08:00 |
|
Charles7c
|
79891e8b5a
|
新增:新增接口文档配置(基于 Spring Doc OpenAPI,使用 Knife4j 作为增强解决方案)
|
2022-12-11 22:32:18 +08:00 |
|
Charles7c
|
1e5eaab9d3
|
新增:新增获取图片验证码 API(引入 Redisson、Hutool、Easy Captcha 依赖,详情可见 README 介绍)
|
2022-12-11 15:06:21 +08:00 |
|