Nav apraksta

tsurumure aa56b4e6ef Fix 10 mēneši atpakaļ
.mvn 09719a6ffc commit message 1 gadu atpakaļ
configuration 6d0927eed1 优化 10 mēneši atpakaļ
db 975bf42de7 优化目录 10 mēneši atpakaļ
src 975bf42de7 优化目录 10 mēneši atpakaļ
.drone.yml aa56b4e6ef Fix 10 mēneši atpakaļ
.gitignore 5be58211de Edit 10 mēneši atpakaļ
Dockerfile e4620163c1 RestoreCache 10 mēneši atpakaļ
README.md 6d0927eed1 优化 10 mēneši atpakaļ
docker-compose.yml e4620163c1 RestoreCache 10 mēneši atpakaļ
pom.xml aa56b4e6ef Fix 10 mēneši atpakaļ

README.md

架构

  • Ubuntu 22.04 + JDK 19.0.2 + Maven 3.8.1
  • Docker 25.0.4 + Docker-Compose 2.6.1 + Gogs + Drone
  • MySQL 8.0.31 + Redis 5.0.14.1
  • Springboot 3.1.1 + Mybatis-plus 3.5.3.2

配置

Maven 配置 (用户配置)

(阿里源通用配置,无私库,无第三方库,)

./configuration/.m2/settings.xml

手动部署

第三方JAR包在 ./configuration/.m2/repository 目录,命令添加到本地 Maven 仓库

mvn install:install-file -Dfile=configuration/.m2/repository/ziniao-sdk-java-5.1.0.jar -DgroupId=com.ziniao -DartifactId=ziniao-sdk-java -Dversion=5.1.0 -Dpackaging=jar
// 如果出现拒绝访问,则需要使用管理员权限执行命令

首次部署需在 pom.xml 中去除 copy-dependencies 注释,启用分包功能 (将包分离到 libs 文件夹中),像这样:

/home/www/project/BackendSys/libs

将分离出来的文件,上传到远程服务器目录

执行打包命令:

mvn clean package
mvn clean package -P dev

Ubuntu 部署

// 安装 nodup (Ubuntu-22.04 虚拟机可能需要安装)
sudo apt install perforate -y

// 启动 (libs文件夹与.jar包同级)
// sh backendsys.sh restart
sh backendsys.sh start

// 监视日志
tail -f backendsys.log

项目开发指南

主要目录说明

  • (database/) 存放数据库.sql文件的目录
  • (config/Security/SecurityConfig/) Security放行白名单/跨域资源配置
  • (config/SwaggerConfig/) Swagger文档配置
  • (filter/JwtAuthenticationFilter/) JWT放行白名单配置
  • (exception/GlobalExceptionHandler/) 全局异常处理类

更改项目名称

  • cmd + Shift + F 将 com.xxx 名称进行全局替换;
  • 将 src/main/java/com/xxx 名称进行修改

约束与规范

1.变量

1) 所有返回值的输出字段,使用 蛇形命名法 (单词之间使用下划线 _ 分隔,所有字母一般都小写) 2表字段的初始值及赋值,尽量不为 0,以及不从 0 开始

2.常用

1) 实体类

创建实体类时,创建 id 的同时必须要创建多一个 类id,比如 (article_id), 在 {编辑} 与 {删除} 操作时,传参和返回值 必须使用该 类id

2) 分页

页码从1开始,分页使用 PageHelper 插件, Service 写法参考: com.backendsys.service.v1.System.SysUserServiceImpl.queryUser

public Map<String, Object> queryUser(Integer pageNum, Integer pageSize, SysUserDTO sysUserDTO) {
    // 分页查询
    if (pageNum != null && pageSize != null) {
        PageHelper.startPage(pageNum, pageSize);
    }
    // 分页输出 (自定义)
    List<Map<String, Object>> list = sysUserMapper.queryUserList(sysUserDTO);
    PageInfoResult pageInfoResult = new PageInfoResult(list);
    return pageInfoResult.toMap();
}

3) 增删改 操作必须要加 redisson 分布式锁,锁的命名为小驼峰格式 (aA)

4) 提示文字

提示出现 flag 字眼的代表是 逻辑删除,字段 del_flag
#### 5) GetMapper
不要在 Controller class 上面写路由,要在每个方法上面写上完整路径 (方便检索)
#### 6) Token
如果想在 token 加字段,在 JwtUtil.createSystemToken 中增加

### 3.数据库 / Mybatis
#### 1) 外键
建表,禁止使用外键
#### 2) 字段
2.1) Mybatis.xml 在 `非必填`,`空值` 的情况下,要在查询语句加入空值转义:

COALESCE(uf.nickname, '') nickname,


2.2) SQL时间字段创建统一按照以下

create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',


2.3) COUNT 返回值默认是 Long 类型

COUNT(us.id) AS user_count .. Long user_count = (Long) sysUserRole.get("user_count");


2.4) Mapper/Service
- 查,列表、详情,定义变量不使用实体类,统一使用:
`List<Map<String, Object>>` 或 `Map<String, Object>`
- 增/删/改时,接收参数使用实体类;返回值使用Long类型或Map类型;

2.5) Mapper/Service/Entity/Controller 统一使用目标的`单数`命名

#### 3) 关联查询 / 嵌套查询
使用 集合类型 时:

// 列表使用 LinkedHashMap 类型,详情使用实体类 ..

..

#### 4) 更新操作
更新操作之前,需要手动判断该次更新的记录是否存在,并返回相关错误提示

public Result updateUserRole(@Validated(SysUserRoleDTO.Update.class) @RequestBody SysUserRoleDTO sysUserRoleDTO) { // 判断是否存在 Map sysUser = sysUserMapper.queryUserByIdOrName(sysUserDTO.getUser_id(), null); if (sysUser == null) {

  return Result.error(ResultEnum.DATABASE_OPERATION_FAILED.getCode(), "用户不存在");

} // ```

4.文档

1) 名词解释

  • 获得 前缀表示从数据库获取数据;
  • 查询 前缀表示从远程第三方直接获取数据;

Future (待加功能)

1.sys_dictionary.sql 字典表重构

  • 字段:{ id, dictionary_key, dictionary_value, lang }
  • 使用 JSON 作为储存值,例如:{ dictionary_key: "Gender", dictionary_value: "[{\"label\":\"男\",\"value\":1},{\"label\":\"女\",\"value\":2}]" }
  • 接口1:查询接口,首次调用Service时,将该值保存到Redis长效缓存
  • 接口2:手动更新缓存的接口