gcoder是一款基于数据库结构的可扩展代码生成器。以自定义template和plugin来扩展,两者的合集称为gcoder
$ npm insatll -g gcoder
$ gcoder init json #当前目录生成.gcoder.json文件,里面配置数据库,模板和插件信息
$ gcoder add <git-url> #根据gcoder git路径添加gcoder(包含template和plugin)
$ gcoder gen #根据模板在当前目录的.gcoder下产生文件
当前目录生成.gcoder.json文件
{
"gcoder": "使用哪个gcoder",
"db": {
"host": "数据库",
"port": "端口",
"database": "数据库名称",
"username": "用户名",
"password": "密码",
"dialect": "当前只支持mysql"
},
"splitChat": "表名称和字段切分字符,默认_",
"plugins": [插件列表]
}
根据git地址添加gcoder
列出当前可用的gcoder
根据gcoder生成代码
可选参数 | 是否必须 | 说明 |
---|---|---|
-t | 否 | 指定表,只根据这些表产生文件,多表逗号隔开,比如:gcoder gen -t table1,table2 |
gcoder-java
|-plugins #存放plugins目录
|- mysql-java-type-map.plugin.js #插件以plugin.js后缀
|-template #存放模板目录
|- ${upperCamelName}VO.java #文件名有表达式,每个表都会产生文件
|- mybatis-config.xml #没有模板则只产生一个
该插件用于mysql字段类型转java字段类型
'use strict';
var gcoder = require('gcoder');
var MysqlJavaTypeMapPlugin = module.exports = gcoder.Plugin.extend({
constructor: function () {
}
});
MysqlJavaTypeMapPlugin.prototype.do = function (tables,config) {
MysqlJavaTypeMapPlugin.__super__.do();
let javaTypeMap = {
"int":"Long",
"tinyint":"Integer",
"varchar":"String",
"float":"float",
"double":"double",
"date":"Date",
"datetime":"Date",
"text":"String",
}
for(let table of tables){
for(let field of table.fieldArray){
field.javaType = javaTypeMap[field.fieldType]
}
}
};
模板使用lodash template语法,表达式模板可用参数
{
table:"表信息",
config: ”.gcoder.json配置信息“
}
public class ${upperCamelName}VO{
<%table.fieldArray.forEach(function(field){%>
//${field.comment}
private ${field.javaType} ${field.lowerCamelName};<%})%>
}
如果有一个表是 user(id,name,user_name),则产生如下
public class UserVO{
private Long id;
private String name;
private String userName;
}
表达式模板可用参数
{
tables:"表列表",
config: ”.gcoder.json配置信息“
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<%tables.forEach(function(table){%>
<typeAlias alias="${table.lowerCamelName}" type="com.xxx.${table.upperCamelName}VO"/><%})%>
</typeAliases>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="userVO" type="com.xxx.UserVO"/>
</typeAliases>
</configuration>
{
"gcoder": "gcoder-java",
"db": {
"host": "数据库",
"port": "端口",
"database": "数据库名称",
"username": "用户名",
"password": "密码",
"dialect": "当前只支持mysql"
},
"plugins": ["mysql-java-type-map"]
}
对数据库表名称和字段名称重命名为小驼峰,大驼峰,【-】分割风格和大写风格,比如表名称user_activity,
表名称 | lowerCamelName | upperCamelName | hyphenTableName | upperTableName |
---|---|---|---|---|
user_activity | userActivity | UserActivity | user-activity | USER-ACTIVITY |
字段 | 解释 |
---|---|
tableName | 表格名称 |
fieldArray | 字段列表 |
字段 | 解释 |
---|---|
fieldName | 字段名称 |
fieldType | 字段类型 |
default | 默认值 |
isPrimaryKey | 是否主键 |
canNull | 是否可空 |
comment | 字段配置 |