Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

自动生成代码和脚本的可执行小工具,重写了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

AltStyle によって変換されたページ (->オリジナル) /