Maven 配置文件
- pom.xml
包结构
- domain(JPA 实体映射对象)
- repository(JPA 操作接口)
- service(业务逻辑)
- service.dto(数据传输对象)
- service.spec(动态查询条件专属对象, 减轻 service 中代码量)
- service.mapper(映射业务对象, 分担 service 中重复代码, 比如关联关系)
- controller(路由控制对象)
- controller.vm(View-Model 对象, 输入参数接受者)
- controller.query(查询参数接受者)
- config(配置类)
- security(安全配置类, 授权验证等操作)
- util(工具类)
项目配置文件
application.yml(主配置文件)
application-dev.yml(开发环境配置文件)
application-test.yml(测试环境配置文件)
application-prod.yml(生产环境配置文件)
重要笔记
- 为了防止 JPA 无法正常映射字段而报错, 可以这么写
@Column(nullable = "`status`", nullable = false)
Integer status;
-
针对一张 t_user 表的增删改差,所需要的类为以下
- User(JPA 实体映射到表)
- UserRepository(JPA 操作实体的接口)
- UserService(业务类)
- UserDTO(数据传输对象)
- UserSpec(动态查询分担者)
- UserMapper(业务逻辑分担者)
- UserController(路由类)
- UserVM(入参类)
- UserQuery(查询参数类)
代码生成器不会在 DTO 上自动生成字段验证注解,如有需要自行根据场景设置
布尔值是需要用到引用类型的,因为他有空的情况
所有 Spec 需要为 class, 因为可以用 @Slf4j
以后所有检查唯一属性写在 Query 里
-
一个 Service 里默认业务方法和对应 Controller 的路由方法
- exists(只读, 按条件查询是否存在)
- getOne(只读, 通过 ID 获取一个)
- getAll(只读, 按条件查询 list, 有数量限制)
- getPaged(只读, 按条件查询 page, 有数量限制)
- create(创建, 已改为一个一个赋值, 属性多关联多时好手动控制)
- update(修改, 已改为一个一个赋值, 属性多关联多时好手动控制)
- deleteInBatch(删除)
UserVM, UserQuery 是否继承 UserDTO, 继承是为了方便属性的获取, 但如果不希望暴露某些属性, 需要考虑是否运用其他 POJO
-
个包之间的引用原则
- controller 只引用 service, 不写业务逻辑
- service 只引用 mapper, repository 和 其他 service, 所有业务逻辑在此
所有对其他类和方法的应用都应该使用 this 关键字, 因为这样看到 this 就知道这是一个引用
http put 一般用于创建, http post 一般用于修改, http delete 一般用于删除
每一个 Service 业务类都应该有一个对应的 ServiceTest 测试类
如果用了 Audit, 那么保存的时间戳只能是毫秒