Без опису

tsurumure 7ea6d298e8 新增文档 10 місяців тому
.mvn 09719a6ffc commit message 1 рік тому
configuration 74064bb8da Debug 10 місяців тому
src 7ea6d298e8 新增文档 10 місяців тому
.drone.yml 12181fcad2 使用缓存 10 місяців тому
.gitignore 09719a6ffc commit message 1 рік тому
Dockerfile 9ddcc7de5e Test 1 рік тому
README.md 74064bb8da Debug 10 місяців тому
docker-compose.yml 714d936058 Edit compose 10 місяців тому
pom.xml 7ea6d298e8 新增文档 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

配置

Maven settings 用户配置

./configuration/.m2/settings.xml

打包

使用 maven 打包应用程序 .jar

# 默认 application-local.yml
mvn clean package
# 使用 application-dev.yml
mvn clean package -P dev

注意:外部JAR包目录在 ./configuration/.m2/repository,本地构建需要按照路径拷贝

Debug

Window 启动 (后台启动)

# 使用 PowerShell 终端执行以下命令
$ cd D:\CodeJava\QuickLaunchSpring\BackendSys
# 启动
$ Start-Process javaw -ArgumentList "-Dloader.path=./libs -jar ./target/backendsys-1.0.0.jar" -RedirectStandardOutput "./target/backendsys-1.0.0.log" -RedirectStandardError "./target/backendsys-1.0.0.err.log" -NoNewWindow -Wait
# 查看控制台
$ Get-Content -Path "./target/backendsys-1.0.0.log" -Wait
# 关闭
$ netstat -ano | findstr 48080
// TCP    0.0.0.0:48080     0.0.0.0:0     LISTENING      4812
# 杀掉进程
$ taskkill /f /pid 25068

Ubuntu 启动

# 安装 nodup (Ubuntu-22.04 虚拟机可能需要安装)
sudo apt install perforate -y
# 后台执行 (手动上传 libs 依赖包)
nohup java -Dloader.path=/home/www/project/BackendSys/libs -jar /home/www/project/BackendSys/target/backendsys-1.0.0.jar > backendsys.log&
# 监视日志
tail -f nohup.out
# 查看已执行的
ps aux | grep java
# 关闭进程
kill 158644

注意:第一次部署 需要手动上传 libs /home/www/project/BackendSys/libs

要在本地构建分包 (Pom -> copy-dependencies):$ mvn clean package

需要设置权限,否则无法上传:$ chown ubuntu:ubuntu /home/www/project/BackendSys/libs

项目开发指南

主要目录说明

  • (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.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) 名词解释

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