前置条件
- 本地项目已经创建成功,详见 新建项目
- 数据库创建成功,详见
DTO
类用来封装用户请求的数据信息,这里指的用户可以是另一个计算机系统,不一定是使用用户界面的人。infra
层的DTO
类同时也是与数据库表一一对应的实体类,创建在项目模块的xxx.infra.dto
包下。- 名称=
表具体名称+DTO
,表名中_
替换为驼峰命名法,首字母大写。如:TaskDTO
对应表为todo_task
。
@Table(name = "table_name")
指定 DTO 对应数据库中表的名称。- 每一个infra层的
DTO
对应数据库中的一个具体表,一般都需要继承BaseDTO
类。
属性规范
- 所有属性均为
private
属性。 - 每一个属性需要生成对应的
getter
和setter
方法。 - 字段名称应根据驼峰命名规则从数据库列名转换过来。例如:数据库列名为
USER_NAME
,则字段名为userName
,特殊字段名称,可以在字段在添加@Column(name = "xxx")
注解,指定数据库列名。
属性的的类型与字段的 type 对应
- 数字类型主键统一采用
Long
。 - 金额、数量 等精度严格浮点类型采用
BigDecimal
所有的主键字段都需要用@Id标注
- 对于自增长、序列(SEQUENCE)类型的主键,需要添加注解
@GeneratedValue(strategy = GenerationType.IDENTITY)
。 - 序列命名规范:
表名_S
。例如:表SYS_USER
对应的序列为SYS_USER_S
。
- 需要用
@Transient
标注javax.persistence.Transient
UserDTO.java 代码
TaskDTO.java 代码
Mapper接口类
mapper
接口类即为传统意义上的DAO
,但与interface
不同,mapper
本身就是对数据访问的具体实现,所以属于供应方的服务实现层。创建在 项目模块 的xxx.infra.mapper
包下。- 每一个
mapper
接口类封装了对数据库表的操作,每一个mapper
对应一个infra层的DTO
类,所以命名为infra层的DTO
类名尾缀替换为Mapper
。如:TaskMapper
对应DTO
为 类。 - 基础的
CRUD
操作不需要再次实现,通过继承Mapper<T>
类实现。其中T
为 对应的infra层的DTO
的泛型。 - 复杂的数据库操作需要定义具体的接口方法。
Mapper
的xml
文件 是数据库的的具体映射,与Mapper
接口同级,创建在 项目模块resources
目录的xxx.mapper
包下。Mapper
的xml
文件,与Mapper
接口对应。所以命名与Mapper
接口类相同。Mapper
的xml
文件非必须,由于继承Mapper类后基本的CRUD
不需要进行配置,所以只有CRUD
操作时不需要创建对应的xml
文件。Mapper
的xml
中的操作 对应Mapper
接口类的方法名。