暂无描述

tsurumure 5be58211de Edit 10 月之前
.mvn 09719a6ffc commit message 1 年之前
configuration 6d0927eed1 优化 10 月之前
db 975bf42de7 优化目录 10 月之前
src 975bf42de7 优化目录 10 月之前
.drone.yml 12181fcad2 使用缓存 10 月之前
.gitignore 5be58211de Edit 10 月之前
Dockerfile 9ddcc7de5e Test 1 年之前
README.md 6d0927eed1 优化 10 月之前
docker-compose.yml 714d936058 Edit compose 10 月之前
pom.xml 6d0927eed1 优化 10 月之前

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:手动更新缓存的接口