Skip to content

自动生成代码和脚本的可执行小工具,重写了dbWriter

Notifications You must be signed in to change notification settings

howroad/cdwriter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dbWriter

自动代码生成器v0.11.

#####编写目的:

公司项目中用到很多CURD操作,且有代码的格式、注释信息有各种要求,使用的公司自己的框架。网上其他的代码生成器格式死板,不太好用,为了省去重复的操作, 把时间花到有意义的地方,编写了这个小工具,用于生成代码和脚本。

有以下功能:

1.可以输出如下代码:

  • JavaBean
  • Service接口及实现类
  • Dao接口即实现类
  • Ibatis的XML文件
  • 可重复执行的建表脚本、新增字段脚本、修改字段类型脚本
  • 可重复执行的数据插入脚本
  • 根据自定义模版实现其他的大量重复代码(例如Controller、Mysql脚本、js、等等)

2.输出的代码可以基于以下几种模式

  • 基于Excel全新生成代码和脚本:新建表时在Excel中编辑,工具读取Excel中的建表信息生成所有代码
  • 基于数据库连接全新生成代码和脚本,工具读取数据库信息生成所有代码
  • 表修改生成脚本:修改数据库中的表,在Excel中编辑,生成新增/修改字段的脚本
  • 基于数据库和JavaBean:自动生成映射关系,然后生成所有代码和脚本
  • 基于数据库生成数据插入脚本:可重复执行
  • 自定义模版,根据模版生成所需要的各种代码(工具包含了Oracle + iBatis的脚本)

3.生成的代码目录 cdWriter
│ 0_202004161100.csv 用JavaBean和数据库生成的映射关系
│ 0_202004161138.csv 用JavaBean和数据库生成的映射关系
│ 1.xlsx 工具基于的文档

├─in
│ AccountApply.class 导入的JavaBean编译后的文件
│ AccountApply.java 自行导入的JavaBean

├─out 命名规则可以自定义
│ │ AccountApply.java 生成的JavaBean
│ │ AccountApplyDao.java 生成的Dao
│ │ AccountApplyDaoImpl.java 生成的DaoImpl
│ │ AccountApplyScope.java 生成的查询条件Scope
│ │ AccountApplyService.java 生成的Service
│ │ AccountApplyServiceImpl.java 生成的ServiceImpl
│ │ AccountApplyView.java 生成的VO
│ │
│ ├─db
│ │ │ AIMS_ACCOUNT_APPLY.TAB 生成的建表语句
│ │ │ AIMS_ACCOUNT_APPLY_SEQ.PDC 建表生成的主键序列可不生成
│ │ │
│ │ └─patch
│ │ AIMS_ACCOUNT_APPLY2.TAB 基于自定义模版文件生成的另一种格式的文件
│ │
│ ├─sqls
│ │ │ AIMS_ACCOUNT_APPLY.SQL 自动生成的表的可插入脚本,取前1000行
│ │ │
│ │ └─cust
│ │ AIMS_ACCOUNT_APPLY.SQL 根据自定义SQL和主键组合生成的数据插入可重复执行脚本
│ │
│ ├─strait 这个目录是自定义模版生成的
│ │ AIMS_ACCOUNT_APPLY.TAB
│ │ AIMS_ACCOUNT_APPLY_SEQ.PDC
│ │
│ └─xml
│ AIMS_AccountApply.xml ibatis脚本
│ AIMS_AccountApply2.xml 自定义的ibatis脚本,因为templet的目录和默认生成的一样

└─templet
├─db
│ $table{tableName}.TAB.templet 手动加的模版,命名规则见文件名
│ $table{tableName}SEQ.PDC.templet 手动加的模版,命名规则见文件名

└─xml
$common{appNoUpper}
$table{entityName}2.xml.templet 手动加的模版,命名规则见文件名

4.windows下可直接执行,需要jre

5.demo

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="AIMS.AccountApplyDao">

    <!-- 分页 start -->
    <sql id="pagingStartSql">
        <isNotNull property="paging">
            SELECT * FROM (SELECT N.*,ROWNUM AS R
            FROM (
        </isNotNull>
    </sql>
    
    <!-- 分页 end -->
    <sql id="pagingEndSql">
        <isNotNull property="paging">
            ) N WHERE ROWNUM <![CDATA[<=]]> (#paging.endRow#)) T
            WHERE T.R > #paging.startRow#
        </isNotNull>
    </sql>
    
    <!-- 查询 账户申请工单表公共SQL-->
    <sql id="queryAccountApplyScopeSQL">
        <isNotEmpty property="fmId" prepend="and">
            AAA.FMID = #fmId#
        </isNotEmpty>
       ...
        <isNotEmpty property="abolishmentFlag" prepend="and">
            AAA.ABOLISHMENT_FLAG = #abolishmentFlag#
        </isNotEmpty>
        <isNotEmpty property="isSendN9" prepend="and">
            AAA.IS_SEND_N9 = #isSendN9#
        </isNotEmpty>
    </sql>
    
    <!-- 显示 账户申请工单表公共SQL-->
    <sql id="showAccountApplyViewSQL">
        AAA.FMID AS "fmId",
        AAA.APPLYID AS "applyId",
    	...
        AAA.ABOLISHMENT_FLAG AS "abolishmentFlag",
        AAA.IS_SEND_N9 AS "isSendN9"
    </sql>

    <!-- 新增账户申请工单表 -->
    <insert id="saveAccountApply" parameterClass="com.nstc.aims.model.AccountApply">
        <selectKey resultClass="java.lang.Integer" keyProperty="fmId">
            SELECT AIMS_ACCOUNT_APPLY_SEQ.NEXTVAL AS fmId FROM DUAL
        </selectKey>
        INSERT INTO AIMS_ACCOUNT_APPLY (
            FMID,
            APPLYID,
            ASSID,
          	...
            IS_SEND_N9
        ) VALUES(
            #fmId#,
            #applyId#,
            #assId#,
            #accountId#,
            #cltNo#,
         	...
            #isSendN9#
        )
    </insert>

    <!-- 修改账户申请工单表 -->
    <update id="updateAccountApply" parameterClass="com.nstc.aims.model.AccountApply">
        UPDATE AIMS_ACCOUNT_APPLY AAA SET
        AAA.FMID = #fmId#
        <isNotNull prepend="," property="applyId">
            AAA.APPLYID = #applyId#
        </isNotNull>
       	...
        <isNotNull prepend="," property="isSendN9">
            AAA.IS_SEND_N9 = #isSendN9#
        </isNotNull>
        WHERE AAA.FMID = #fmId#
    </update>

    <!-- 查询账户申请工单表列表 -->
    <select id="getAccountApplyList" parameterClass="com.nstc.aims.model.scope.AccountApplyScope" resultClass="com.nstc.aims.model.view.AccountApplyView">
        SELECT
        <include refid="showAccountApplyViewSQL" />
        FROM AIMS_ACCOUNT_APPLY AAA WHERE 1 = 1
        <include refid="queryAccountApplyScopeSQL" />
        ORDER BY AAA.FMID ASC
    </select>

    <!-- 根据条件查询账户申请工单表View的第一条记录  -->
    <select id="getAccountApplyByScope" parameterClass="com.nstc.aims.model.scope.AccountApplyScope" resultClass="com.nstc.aims.model.view.AccountApplyView">
        SELECT
        <include refid="showAccountApplyViewSQL" />
        FROM AIMS_ACCOUNT_APPLY AAA WHERE 1 = 1
        <include refid="queryAccountApplyScopeSQL" />
        AND ROWNUM = 1
    </select>
    
    <!-- 根据Id集合删除账户申请工单表 -->
    <delete id="deleteAccountApplyByIds" parameterClass="java.util.ArrayList">
        DELETE FROM AIMS_ACCOUNT_APPLY AAA WHERE  AAA.FMID IN
        <iterate open="(" close=")" conjunction=",">  
            #ids[]#  
        </iterate>
    </delete>   

    <!-- 查询账户申请工单表记录数 -->
    <select id="getAccountApplyPageCount" parameterClass="com.nstc.aims.model.scope.AccountApplyScope" resultClass="java.lang.Integer">
        SELECT
            COUNT(0)
        FROM AIMS_ACCOUNT_APPLY AAA WHERE 1 = 1
        <include refid="queryAccountApplyScopeSQL" />
    </select>         
    
    <!-- 查询账户申请工单表分页列表 -->
    <select id="getAccountApplyPageList" parameterClass="com.nstc.aims.model.scope.AccountApplyScope" resultClass="com.nstc.aims.model.view.AccountApplyView">
        <include refid="pagingStartSql" />
        SELECT
        <include refid="showAccountApplyViewSQL" />
        FROM AIMS_ACCOUNT_APPLY AAA WHERE 1 = 1
        <include refid="queryAccountApplyScopeSQL" />
        ORDER BY AAA.FMID ASC
        <include refid="pagingEndSql" />
    </select>

    <!-- 删除账户申请工单表 -->
    <delete id="deleteAccountApply" parameterClass="com.nstc.aims.model.scope.AccountApplyScope">
        DELETE AIMS_ACCOUNT_APPLY AAA WHERE 1 = 1
        <include refid="queryAccountApplyScopeSQL" />
    </delete> 
    
    <!-- 保存或修改账户申请工单表集合 -->  
    <update id="saveOrUpdateAccountApplyList" parameterClass="java.util.ArrayList">
        MERGE INTO AIMS_ACCOUNT_APPLY AAA 
        USING
        <iterate open="(" close=") A" conjunction="UNION">  
            SELECT
            <!-- 主键为空时候返回字符串,与原类型不匹配,非字符串类型都需要做转换 -->
            DECODE(#list[].fmId#,NULL,NULL,#list[].fmId#) AS FMID,
            DECODE(#list[].applyId#,NULL,NULL,#list[].applyId#) AS APPLYID,
            ...
            DECODE(#list[].abolishmentFlag#,NULL,NULL,#list[].abolishmentFlag#) AS ABOLISHMENT_FLAG,
            DECODE(#list[].isSendN9#,NULL,NULL,#list[].isSendN9#) AS IS_SEND_N9
            FROM DUAL
        </iterate>
        ON (A.FMID = AAA.FMID)
        WHEN MATCHED THEN
            UPDATE SET
                AAA.APPLYID = A.APPLYID,
                AAA.ASSID = A.ASSID,
              	...
                AAA.ABOLISHMENT_FMID = A.ABOLISHMENT_FMID,
                AAA.ABOLISHMENT_REASON = A.ABOLISHMENT_REASON,
                AAA.ABOLISHMENT_FLAG = A.ABOLISHMENT_FLAG,
                AAA.IS_SEND_N9 = A.IS_SEND_N9
        WHEN NOT MATCHED THEN 
            INSERT (
            FMID,
            APPLYID,
         	...
            ABOLISHMENT_REASON,
            ABOLISHMENT_FLAG,
            IS_SEND_N9
            ) VALUES (
            AIMS_ACCOUNT_APPLY_SEQ.NEXTVAL,
            A.APPLYID,
            A.ASSID,
          	...
            A.IS_SEND_N9
            )    
    </update>
    
    <!-- 保存或修改账户申请工单表实体 -->  
    <update id="saveOrUpdateAccountApply" parameterClass="com.nstc.aims.model.AccountApply">
        MERGE INTO AIMS_ACCOUNT_APPLY AAA
        USING DUAL
            ON (AAA.FMID = #fmId#)
        WHEN MATCHED THEN
        UPDATE
            SET
            AAA.APPLYID = #applyId#,
            AAA.ASSID = #assId#,
            ...
            AAA.IS_SEND_N9 = #isSendN9#
        WHEN NOT MATCHED THEN
            INSERT (
                FMID,
                APPLYID,
              	...
                ABOLISHMENT_FLAG,
                IS_SEND_N9
            ) 
            VALUES (
                AIMS_ACCOUNT_APPLY_SEQ.NEXTVAL,
                #applyId#,
                #assId#,
                ...
                #isSendN9#
            )
    </update>
    
</sqlMap>
DECLARE
    CNT INTEGER;
BEGIN
    SELECT COUNT(0) INTO CNT FROM USER_ALL_TABLES
    WHERE TABLE_NAME = UPPER('G_REMIND_BUSS');
    IF CNT = 0 THEN
    EXECUTE IMMEDIATE 'CREATE TABLE G_REMIND_BUSS(
        "RB_ID" NUMBER ,
        "BUSS_CODE" VARCHAR2(64) NOT NULL,
        "BUSS_NAME" VARCHAR2(64) NOT NULL,
        "REMARKS" VARCHAR2(128) ,
        "ORDER_NUM" NUMBER DEFAULT ON NULL 0 NOT NULL,
        "APPNO" VARCHAR2(32) ,
        "CREATE_TIME" DATE DEFAULT ON NULL SYSDATE ,
        "UPDATE_TIME" DATE DEFAULT ON NULL SYSDATE 
        )';
    EXECUTE IMMEDIATE 'COMMENT ON TABLE G_REMIND_BUSS IS ''提醒表''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN G_REMIND_BUSS."RB_ID" IS ''主键''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN G_REMIND_BUSS."BUSS_CODE" IS ''提醒编号''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN G_REMIND_BUSS."BUSS_NAME" IS ''提醒名称''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN G_REMIND_BUSS."REMARKS" IS ''备注''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN G_REMIND_BUSS."ORDER_NUM" IS ''排序''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN G_REMIND_BUSS."APPNO" IS ''模块编号''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN G_REMIND_BUSS."CREATE_TIME" IS ''创建时间''';
    EXECUTE IMMEDIATE 'COMMENT ON COLUMN G_REMIND_BUSS."UPDATE_TIME" IS ''修改时间''';
    END IF;
END;
/

DECLARE
    CNT INTEGER;
BEGIN
    SELECT COUNT(0) INTO CNT FROM USER_CONSTRAINTS
    WHERE CONSTRAINT_NAME = UPPER('G_REMIND_BUSS_PK');
    IF CNT = 0 THEN
    EXECUTE IMMEDIATE 'ALTER TABLE G_REMIND_BUSS ADD CONSTRAINT G_REMIND_BUSS_PK PRIMARY KEY("RB_ID")';
    END IF;
END;
/

不一一列举了

作者:Howroad Email:436081860@QQ.com

About

自动生成代码和脚本的可执行小工具,重写了dbWriter

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published