Panda学习笔记3——多表功能开发(1)需求、建表

需求说明

参考编码规则

参考下图的这个编码规则功能。
在这里插入图片描述

需求

要模仿编码规则这个功能,来开发一个一模一样的功能。

涉及到的表和类

序号 类型 名称
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文件

  1. 先执行 mvn clean install 进行打包。
  2. 打包完成之后,在项目根目录(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

猜你喜欢

转载自blog.csdn.net/qq_43415405/article/details/83538309
今日推荐