后端项目开发:代码生成

大部分项目里其实有很多代码都是重复的,几乎每个基础模块的代码都有增删改查的功能,而这些功能都是大同小异, 如果这些功能都要自己去写,将会大大浪费我们的精力降低效率。所以这种重复性的代码可以使用代码生成。

在领域驱动设计中,若使用JPA可以根据实体自动生成数据库表。但是该种方式有点风险。

所以我们可以使用mybatis-generate提前设计好数据库表,再根据数据库表生成相应的代码。

若不想使用mybatis-generate的自动代码生成,那么可以选择使用Volocity工具自行编辑template模板生成对应的代码文件。

若使用数据库表生成相应的代码,需要关注数据库表的种类。

数据库表结构分为:

单表结构(不包含任意外键)

新建数据库表结构(单表)

drop table if exists sys_student;
create table sys_student (
  student_id           int(11)         auto_increment    comment '编号',
  student_name         varchar(30)     default ''        comment '学生名称',
  student_age          int(3)          default null      comment '年龄',
  student_hobby        varchar(30)     default ''        comment '爱好(0代码 1音乐 2电影)',
  student_sex          char(1)         default '0'       comment '性别(0男 1女 2未知)',
  student_status       char(1)         default '0'       comment '状态(0正常 1停用)',
  student_birthday     datetime                          comment '生日',
  primary key (student_id)
) engine=innodb auto_increment=1 comment = '学生信息表';

树表结构(表中含父ID字段)

新建数据库表结构(树表)

drop table if exists sys_product;
create table sys_product (
  product_id        bigint(20)      not null auto_increment    comment '产品id',
  parent_id         bigint(20)      default 0                  comment '父产品id',
  product_name      varchar(30)     default ''                 comment '产品名称',
  order_num         int(4)          default 0                  comment '显示顺序',
  status            char(1)         default '0'                comment '产品状态(0正常 1停用)',
  primary key (product_id)
) engine=innodb auto_increment=1 comment = '产品表';

#主子表结构
新建数据库表结构(主子表)

-- ----------------------------
-- 客户表
-- ----------------------------
drop table if exists sys_customer;
create table sys_customer (
  customer_id           bigint(20)      not null auto_increment    comment '客户id',
  customer_name         varchar(30)     default ''                 comment '客户姓名',
  phonenumber           varchar(11)     default ''                 comment '手机号码',
  sex                   varchar(20)     default null               comment '客户性别',
  birthday              datetime                                   comment '客户生日',
  remark                varchar(500)    default null               comment '客户描述',
  primary key (customer_id)
) engine=innodb auto_increment=1 comment = '客户表';


-- ----------------------------
-- 商品表
-- ----------------------------
drop table if exists sys_goods;
create table sys_goods (
  goods_id           bigint(20)      not null auto_increment    comment '商品id',
  customer_id        bigint(20)      not null                   comment '客户id',
  name               varchar(30)     default ''                 comment '商品名称',
  weight             int(5)          default null               comment '商品重量',
  price              decimal(6,2)    default null               comment '商品价格',
  date               datetime                                   comment '商品时间',
  type               char(1)         default null               comment '商品种类',
  primary key (goods_id)
) engine=innodb auto_increment=1 comment = '商品表';

在进行代码的自动生成时,接口方法重复的不仅有增删查改方法。若进行细分,可能还会有以下方法。

接口方法

对于单表的方法,例如学生表,可能会有这些方法:

  1. POST /students:插入新的学生记录。
  2. PUT /students/{studentId}:更新指定学生编号的学生记录。
  3. DELETE /students/{studentId}:删除指定学生编号的学生记录。
  4. GET /students/{studentId}:获取指定学生编号的学生记录。
  5. GET /students:查询学生记录,可以通过查询参数指定条件进行筛选。
  6. GET /students?page={page}&size={size}:分页查询学生记录。
  7. GET /students?sort={field}&order={asc/desc}:排序查询学生记录。
  8. GET /students/stats:统计学生记录的相关信息。
  9. POST /students/batch:批量插入学生记录。
  10. PUT /students/batch:批量更新学生记录。
  11. DELETE /students/batch:批量删除学生记录。
  12. PUT /students?condition={condition}:根据条件更新学生记录。
  13. DELETE /students?condition={condition}:根据条件删除学生记录。
  14. GET /students?keyword={keyword}:根据关键字模糊查询学生记录。
  15. GET /students/group?field={field}:根据字段对学生记录进行分组查询。
  16. GET /students/{studentId}/details:查询指定学生编号的学生详细信息和对应的班级信息。

对于树表的方法,例如产品表,可能会有这些方法:

  1. POST /products:插入新的产品记录。
  2. PUT /products/{productId}:更新指定产品编号的产品记录。
  3. DELETE /products/{productId}:删除指定产品编号的产品记录。
  4. GET /products/{productId}:获取指定产品编号的产品记录。
  5. GET /products?parentId={parentId}:获取指定父产品的所有子产品。
  6. GET /products/{productId}/parent:获取指定产品的父产品。
  7. GET /products/tree:获取整个产品表的树形结构。
  8. PUT /products/{productId}/move?parentId={parentId}:将指定产品节点移动到另一个父节点下。
  9. GET /products?sort=order_num&order={asc/desc}:排序查询产品记录。
  10. GET /products/{parentId}/descendants:获取指定父产品的所有子孙产品。
  11. GET /products/{productId}/siblings:获取指定产品的同级兄弟产品。
  12. GET /products/roots:获取所有顶级根节点产品。
  13. GET /products/{productId}/path:获取指定产品到根节点的路径。
  14. GET /products/{parentId}/child-count:统计指定父产品的子节点数量。
  15. DELETE /products/batch:批量删除产品记录。
  16. PUT /products/batch:批量更新产品记录。
  17. GET /products/leaves:获取所有叶子节点产品。
  18. GET /products/level/{level}:查询指定层级的产品节点。
  19. POST /products/batch:批量插入产品记录。
  20. GET /products?keyword={keyword}:根据关键字模糊查询产品记录。
  21. GET /products?page={page}&size={size}:分页查询产品记录。
  22. GET /products/stats:统计产品记录的相关信息。

对于主子表结构,例如客户表和商品表,可能的方法有:

  1. POST /customers:插入新的客户记录。
  2. PUT /customers/{customerId}:更新指定客户编号的客户记录。
  3. DELETE /customers/{customerId}:删除指定客户编号的客户记录。
  4. GET /customers/{customerId}:获取指定客户编号的客户记录。
  5. GET /customers/{customerId}/goods:获取指定客户的所有关联商品记录。
  6. POST /goods:插入新的商品记录。
  7. PUT /goods/{goodsId}:更新指定商品编号的商品记录。
  8. DELETE /goods/{goodsId}:删除指定商品编号的商品记录。
  9. GET /goods/{goodsId}:获取指定商品编号的商品记录。
  10. GET /goods/{goodsId}/customer:获取指定商品的关联客户记录。
  11. GET /customers:查询客户记录,可以通过查询参数指定条件进行筛选。
  12. GET /goods:查询商品记录,可以通过查询参数指定条件进行筛选。
  13. GET /customers?page={page}&size={size}:分页查询客户记录。
  14. GET /goods?page={page}&size={size}:分页查询商品记录。
  15. GET /customers?sort={field}&order={asc/desc}:排序查询客户记录。
  16. GET /goods?sort={field}&order={asc/desc}:排序查询商品记录。
  17. GET /customers/stats:统计客户记录的相关信息。
  18. GET /goods/stats:统计商品记录的相关信息。

你可能感兴趣的:(软件项目开发最佳实践,oracle,数据库)