需求说明
参考编码规则
参考下图的这个编码规则功能。
需求
要模仿编码规则这个功能,来开发一个一模一样的功能。
涉及到的表和类
序号 | 类型 | 名称 |
---|---|---|
1 | header表 | sys_code_rules_test1_header |
2 | line表 | sys_code_rules_test1_line |
3 | DTO | CodeRulesTest1Header |
4 | DTO | CodeRulesTest1Line |
5 | Mapper | CodeRulesTest1HeaderMapper |
6 | Mapper | CodeRulesTest1LineMapper |
7 | SysCodeRuleTest1Cache | |
8 | Service | ICodeRulesTest1HeaderService |
9 | Service | ICodeRulesTest1LineService |
10 | ServiceImpl | CodeRulesTest1HeaderServiceImpl |
11 | ServiceImpl | CodeRulesTest1LineServiceImpl |
12 | Controller | CodeRulesTest1HeaderController |
13 | Controller | CodeRulesTest1LineController |
14 | Screen | code/rule/test1/codeRulesTest1.screen |
建表
文件结构
groovy文件结构如下:
databaseChangeLog
changeSet
createSequence
createTable
createTable
...
changeSet
createSequence
createTable
createTable
...
...
注意的点
- 现有的建表 changeSet 写法, 添加新的 changeSet
- 基础建表语句
- 表描述信息
- 主键设置
- 列描述信息
- 合理的类型,长度
- 是否允许 NULL
- 默认值(如果有)
- 索引(唯一索引,普通索引)
- 主键自增起始 10001
- oracle 是设置 sequence start with
groovy文件完整示例
脚本引擎的groovy文件内容:
package com.hand.hec.panda.db
import com.hand.hap.liquibase.MigrationHelper
def mhi = MigrationHelper.getInstance()
dbType = mhi.dbType()
//databaseChangeLog: 将logicalFilePath的值修改为与文件名相同
databaseChangeLog(logicalFilePath:"2018-10-29-core-init-table-migration.groovy"){
//changeSet : author为hand邮箱名, id为 日期-基础表名
changeSet(author: "[email protected]", id: "20181029-sys_code_rules_test1_header"){
//1.序列 : 序列名称为基础表_S , 起始值均为 10001
if(mhi.isDbType('oracle') || mhi.isDbType('hana') || mhi.isDbType('postgresql')){
createSequence(sequenceName: '20181029-sys_code_rules_test1_header_s', startValue:"10001")
}
//2.基表 : tableName即为表名
createTable(tableName: "sys_code_rules_test1_header"){
//2.1 主键
if(mhi.isDbType('oracle') || mhi.isDbType('hana') || mhi.isDbType('postgresql')){
column(name:"header_id",type:"bigint",remarks:"头ID"){
constraints(nullable: "false", primaryKey: "true",primaryKeyName: "sys_code_rules_test1_header_pk")
}
}else {
column(name:"header_id",type:"bigint",autoIncrement: "true", startWith:"10001",remarks:"头ID"){
constraints(nullable: "false", primaryKey: "true",primaryKeyName: "sys_code_rules_test1_header_pk")
}
}
// 2.2 字段
column(name: "rule_code", type:"nvarchar(50)", remarks: "编码规则CODE"){
constraints(nullable: "false",unique:"true",uniqueConstraintName:"sys_code_rules_test1_header_u1")
}
column(name: "rule_name", type:"nvarchar(50)", remarks: "名称")
column(name: "description", type:"nvarchar(255)", remarks: "描述")
column(name: "enable_flag", type:"nvarchar(5)", remarks: "启用标志")
//2.3 who 字段(9个),很多表都有这些字段
column(name: "object_version_number", type: "bigint", defaultValue: "1")
column(name: "request_id", type: "bigint", defaultValue: "-1")
column(name: "program_id", type: "bigint", defaultValue: "-1")
column(name: "created_by", type: "bigint", defaultValue: "-1")
column(name: "creation_date", type: "datetime", defaultValueComputed: "CURRENT_TIMESTAMP")
column(name: "last_updated_by", type: "bigint", defaultValue: "-1")
column(name: "last_update_date", type: "datetime", defaultValueComputed: "CURRENT_TIMESTAMP")
column(name: "last_update_login", type: "bigint", defaultValue: "-1")
//2.4 无扩展字段,要在DTO类上加@ExtensionAttribute(disable=true)
}
}
//changeSet : author为hand邮箱名, id为 日期-基础表名
changeSet(author: "[email protected]", id: "20181029-sys_code_rules_test1_line"){
//1.序列 : 序列名称为基础表_S , 起始值均为 10001
if(mhi.isDbType('oracle') || mhi.isDbType('hana') || mhi.isDbType('postgresql')){
createSequence(sequenceName: '20181029-sys_code_rules_test1_line_s', startValue:"10001")
}
//2.基表 : tableName即为表名
createTable(tableName: "sys_code_rules_test1_line"){
//2.1 主键
if(mhi.isDbType('oracle') || mhi.isDbType('hana') || mhi.isDbType('postgresql')){
column(name:"line_id",type:"bigint",remarks:"行ID"){
constraints(nullable: "false", primaryKey: "true",primaryKeyName: "sys_code_rules_test1_line_pk")
}
}else {
column(name:"line_id",type:"bigint",autoIncrement: "true", startWith:"10001",remarks:"行ID"){
constraints(nullable: "false", primaryKey: "true",primaryKeyName: "sys_code_rules_test1_line_pk")
}
}
// 2.2 字段
column(name: "header_id", type:"bigint", remarks: "编码头ID"){
constraints(nullable: "false")
}
column(name: "filed_type", type:"nvarchar(10)", remarks: "编码段类型"){
constraints(nullable: "false")
}
column(name: "filed_value", type:"nvarchar(100)", remarks: "编码段值")
column(name: "field_sequence", type:"bigint", remarks: "序号")
column(name: "date_mask", type:"nvarchar(50)", remarks: "日期掩码")
column(name: "seq_length", type:"integer", remarks: "序列长度")
column(name: "start_value", type:"bigint", remarks: "序列开始值")
column(name: "current_value", type:"bigint", remarks: "序列号段当前值")
column(name: "reset_frequency", type:"nvarchar(10)", remarks: "重置频率")
column(name: "reset_date", type:"datetime", remarks: "上次重置日期")
column(name: "step_number", type:"bigint", remarks: "更新数据库步长")
//2.3 who 字段(9个),很多表都有这些字段
column(name: "object_version_number", type: "bigint", defaultValue: "1")
column(name: "request_id", type: "bigint", defaultValue: "-1")
column(name: "program_id", type: "bigint", defaultValue: "-1")
column(name: "created_by", type: "bigint", defaultValue: "-1")
column(name: "creation_date", type: "datetime", defaultValueComputed: "CURRENT_TIMESTAMP")
column(name: "last_updated_by", type: "bigint", defaultValue: "-1")
column(name: "last_update_date", type: "datetime", defaultValueComputed: "CURRENT_TIMESTAMP")
column(name: "last_update_login", type: "bigint", defaultValue: "-1")
//2.4 无扩展字段,要在DTO类上加@ExtensionAttribute(disable=true)
}
}
}
执行groovy文件
- 先执行 mvn clean install 进行打包。
- 打包完成之后,在项目根目录(panda-parent)执行如下命令即可(请先将数据库信息修改成正确的):
mvn process-resources -D skipLiquibaseRun=false -D db.driver=org.postgresql.Driver -D db.url=jdbc:postgresql://192.168.12.79:1521/hap_dev -D db.user=hap_dev -D db.password=hap_dev