Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
后端镜像
java镜像
Smart Generator
提交
f5789d4d
S
Smart Generator
项目概览
后端镜像
/
java镜像
/
Smart Generator
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Smart Generator
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f5789d4d
编写于
10月 16, 2013
作者:
黄
黄勇
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
【I】代码重构
上级
2ad839cb
变更
15
显示空白变更内容
内联
并排
Showing
15 changed file
with
394 addition
and
137 deletion
+394
-137
README.md
README.md
+0
-5
pom.xml
pom.xml
+0
-4
src/main/java/com/smart/generator/Generator.java
src/main/java/com/smart/generator/Generator.java
+0
-78
src/main/java/com/smart/generator/command/Command.java
src/main/java/com/smart/generator/command/Command.java
+32
-5
src/main/java/com/smart/generator/command/impl/CreateActionCommand.java
...com/smart/generator/command/impl/CreateActionCommand.java
+3
-2
src/main/java/com/smart/generator/command/impl/CreateAppCommand.java
...va/com/smart/generator/command/impl/CreateAppCommand.java
+4
-1
src/main/java/com/smart/generator/command/impl/CreateCRUDCommand.java
...a/com/smart/generator/command/impl/CreateCRUDCommand.java
+69
-0
src/main/java/com/smart/generator/command/impl/CreateEntityCommand.java
...com/smart/generator/command/impl/CreateEntityCommand.java
+2
-1
src/main/java/com/smart/generator/command/impl/CreatePageCommand.java
...a/com/smart/generator/command/impl/CreatePageCommand.java
+50
-0
src/main/java/com/smart/generator/command/impl/CreateServiceCommand.java
...om/smart/generator/command/impl/CreateServiceCommand.java
+4
-3
src/main/java/com/smart/generator/command/impl/LoadDictCommand.java
...ava/com/smart/generator/command/impl/LoadDictCommand.java
+143
-0
src/main/java/com/smart/generator/command/impl/builder/Builder.java
...ava/com/smart/generator/command/impl/builder/Builder.java
+2
-9
src/main/java/com/smart/generator/command/impl/builder/impl/EntityBuilder.java
...rt/generator/command/impl/builder/impl/EntityBuilder.java
+13
-8
src/main/java/com/smart/generator/command/impl/builder/impl/SQLBuilder.java
...smart/generator/command/impl/builder/impl/SQLBuilder.java
+10
-9
src/test/java/com.smart.generator.test/CommandTest.java
src/test/java/com.smart.generator.test/CommandTest.java
+62
-12
未找到文件。
README.md
浏览文件 @
f5789d4d
Smart Generator
Smart Generator
注意:目前只能生成 MySQL 数据库脚本。
使用方法
使用方法
1.
修改 src/main/resources/db.xls 文件,填写表结构文档。
2.
修改 src/main/resources/config.properties 文件,指定输出路径与包名。
3.
运行 com.smart.generator.Generator 类的 main() 方法,生成相关的代码。
\ No newline at end of file
pom.xml
浏览文件 @
f5789d4d
...
@@ -113,10 +113,6 @@
...
@@ -113,10 +113,6 @@
<filters>
<filters>
<filter>
<filter>
<artifact>
*:*
</artifact>
<artifact>
*:*
</artifact>
<includes>
<include>
**/*.class
</include>
<include>
**/*.properties
</include>
</includes>
<excludes>
<excludes>
<exclude>
com/smart/**/*.class
</exclude>
<exclude>
com/smart/**/*.class
</exclude>
<exclude>
log4j.properties
</exclude>
<exclude>
log4j.properties
</exclude>
...
...
src/main/java/com/smart/generator/Generator.java
已删除
100644 → 0
浏览文件 @
2ad839cb
package
com.smart.generator
;
import
com.smart.framework.util.FileUtil
;
import
com.smart.framework.util.StringUtil
;
import
com.smart.generator.bean.Column
;
import
com.smart.generator.bean.Table
;
import
com.smart.generator.builder.Builder
;
import
com.smart.generator.builder.EntityBuilder
;
import
com.smart.generator.builder.SQLBuilder
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Properties
;
import
jxl.Sheet
;
import
jxl.Workbook
;
import
org.apache.log4j.Logger
;
public
class
Generator
{
private
static
final
Logger
logger
=
Logger
.
getLogger
(
Generator
.
class
);
private
static
final
Properties
config
=
FileUtil
.
loadPropFile
(
"config.properties"
);
public
static
void
main
(
String
[]
args
)
throws
Exception
{
Generator
generator
=
new
Generator
();
generator
.
generate
();
}
public
void
generate
()
{
// TODO 重构
String
inputPath
=
"D:\\Workspace\\smart\\smart-generator\\db.xls"
;
String
outputPath
=
"D:\\Workspace\\smart\\smart-generator\\gen"
;
String
packageName
=
"com.smart.sample.entity"
;
Map
<
Table
,
List
<
Column
>>
tableMap
=
createTableMap
(
inputPath
);
Builder
sqlBuilder
=
new
SQLBuilder
(
outputPath
,
tableMap
);
sqlBuilder
.
build
();
Builder
entityBuilder
=
new
EntityBuilder
(
outputPath
,
tableMap
,
packageName
);
entityBuilder
.
build
();
}
private
Map
<
Table
,
List
<
Column
>>
createTableMap
(
String
inputPath
)
{
Map
<
Table
,
List
<
Column
>>
tableMap
=
new
LinkedHashMap
<
Table
,
List
<
Column
>>();
try
{
File
file
=
new
File
(
inputPath
);
Workbook
workbook
=
Workbook
.
getWorkbook
(
file
);
for
(
int
i
=
1
;
i
<
workbook
.
getNumberOfSheets
();
i
++)
{
Sheet
sheet
=
workbook
.
getSheet
(
i
);
String
tableName
=
sheet
.
getName
().
toLowerCase
();
String
tablePK
=
""
;
List
<
Column
>
columnList
=
new
ArrayList
<
Column
>();
for
(
int
row
=
1
;
row
<
sheet
.
getRows
();
row
++)
{
String
name
=
sheet
.
getCell
(
0
,
row
).
getContents
().
trim
();
String
type
=
sheet
.
getCell
(
1
,
row
).
getContents
().
trim
();
String
length
=
sheet
.
getCell
(
2
,
row
).
getContents
().
trim
();
String
precision
=
sheet
.
getCell
(
3
,
row
).
getContents
().
trim
();
String
notnull
=
sheet
.
getCell
(
4
,
row
).
getContents
().
trim
();
String
pk
=
sheet
.
getCell
(
5
,
row
).
getContents
().
trim
();
String
comment
=
sheet
.
getCell
(
6
,
row
).
getContents
().
trim
();
columnList
.
add
(
new
Column
(
name
,
type
,
length
,
precision
,
notnull
,
pk
,
comment
));
if
(
StringUtil
.
isNotEmpty
(
pk
))
{
tablePK
=
name
;
}
}
tableMap
.
put
(
new
Table
(
tableName
,
tablePK
),
columnList
);
}
workbook
.
close
();
}
catch
(
Exception
e
)
{
logger
.
error
(
"创建 Table 数据出错!"
,
e
);
throw
new
RuntimeException
(
e
);
}
return
tableMap
;
}
}
src/main/java/com/smart/generator/command/Command.java
浏览文件 @
f5789d4d
...
@@ -4,6 +4,8 @@ import com.smart.framework.util.ArrayUtil;
...
@@ -4,6 +4,8 @@ import com.smart.framework.util.ArrayUtil;
import
com.smart.framework.util.StringUtil
;
import
com.smart.framework.util.StringUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
java.io.FileInputStream
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.util.Properties
;
import
java.util.Properties
;
import
org.apache.log4j.Logger
;
import
org.apache.log4j.Logger
;
...
@@ -73,16 +75,26 @@ public abstract class Command {
...
@@ -73,16 +75,26 @@ public abstract class Command {
public
void
postGenerate
()
{
public
void
postGenerate
()
{
}
}
protected
final
String
getAppName
(
String
appPath
)
{
return
getConfigProperty
(
appPath
,
"app"
);
}
protected
final
String
getAppPackage
(
String
appPath
)
{
protected
final
String
getAppPackage
(
String
appPath
)
{
String
appPackage
;
return
getConfigProperty
(
appPath
,
"package"
);
}
private
String
getConfigProperty
(
String
appPath
,
String
property
)
{
String
appName
;
try
{
try
{
Properties
config
=
new
Properties
();
Properties
config
=
new
Properties
();
config
.
load
(
new
FileInputStream
(
appPath
+
"/src/main/resources/config.properties"
));
config
.
load
(
new
FileInputStream
(
appPath
+
"/src/main/resources/config.properties"
));
appPackage
=
config
.
getProperty
(
"package"
);
appName
=
config
.
getProperty
(
property
);
}
catch
(
Exception
e
)
{
}
catch
(
FileNotFoundException
e
)
{
throw
new
RuntimeException
(
"无法获取应用包名!"
);
throw
new
RuntimeException
(
"无法找到 config.properties 文件!"
);
}
catch
(
IOException
e
)
{
throw
new
RuntimeException
(
"加载 config.properties 文件出错!"
);
}
}
return
app
Packag
e
;
return
app
Nam
e
;
}
}
protected
final
String
getCamelhumpName
(
String
name
)
{
protected
final
String
getCamelhumpName
(
String
name
)
{
...
@@ -96,4 +108,19 @@ public abstract class Command {
...
@@ -96,4 +108,19 @@ public abstract class Command {
}
}
return
name
;
return
name
;
}
}
protected
final
String
getDisplayName
(
String
name
)
{
String
displayName
=
""
;
name
=
name
.
trim
().
toLowerCase
();
if
(
name
.
contains
(
"-"
))
{
String
[]
words
=
StringUtil
.
splitString
(
name
,
"-"
);
for
(
String
word
:
words
)
{
displayName
+=
StringUtil
.
firstToUpper
(
word
)
+
" "
;
}
displayName
=
displayName
.
trim
();
}
else
{
displayName
=
StringUtil
.
firstToUpper
(
name
);
}
return
displayName
;
}
}
}
src/main/java/com/smart/generator/command/CreateActionCommand.java
→
src/main/java/com/smart/generator/command/
impl/
CreateActionCommand.java
浏览文件 @
f5789d4d
package
com.smart.generator.command
;
package
com.smart.generator.command
.impl
;
import
com.smart.generator.command.Command
;
import
com.smart.generator.util.VelocityUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -45,7 +46,7 @@ public class CreateActionCommand extends Command {
...
@@ -45,7 +46,7 @@ public class CreateActionCommand extends Command {
// 生成文件
// 生成文件
String
vmPath
=
"create-action/action.java.vm"
;
String
vmPath
=
"create-action/action.java.vm"
;
String
filePath
=
appPath
+
"/src/main/java/"
+
packageName
+
"/action/"
+
actionNameCamelhump
+
".java"
;
String
filePath
=
appPath
+
"/src/main/java/"
+
packageName
+
"/action/"
+
actionNameCamelhump
+
"
Action
.java"
;
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
}
}
}
}
src/main/java/com/smart/generator/command/CreateAppCommand.java
→
src/main/java/com/smart/generator/command/
impl/
CreateAppCommand.java
浏览文件 @
f5789d4d
package
com.smart.generator.command
;
package
com.smart.generator.command
.impl
;
import
com.smart.framework.util.FileUtil
;
import
com.smart.framework.util.FileUtil
;
import
com.smart.framework.util.StringUtil
;
import
com.smart.framework.util.StringUtil
;
import
com.smart.generator.command.Command
;
import
com.smart.generator.util.VelocityUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -102,6 +103,7 @@ public class CreateAppCommand extends Command {
...
@@ -102,6 +103,7 @@ public class CreateAppCommand extends Command {
private
void
generateConfigFileForMain
(
String
dbName
)
{
private
void
generateConfigFileForMain
(
String
dbName
)
{
// 创建数据
// 创建数据
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
dataMap
.
put
(
"app_name"
,
appName
);
dataMap
.
put
(
"app_package"
,
appPackage
);
dataMap
.
put
(
"app_package"
,
appPackage
);
dataMap
.
put
(
"db_name"
,
dbName
);
dataMap
.
put
(
"db_name"
,
dbName
);
...
@@ -114,6 +116,7 @@ public class CreateAppCommand extends Command {
...
@@ -114,6 +116,7 @@ public class CreateAppCommand extends Command {
private
void
generateConfigFileForTest
(
String
dbName
)
{
private
void
generateConfigFileForTest
(
String
dbName
)
{
// 创建数据
// 创建数据
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
dataMap
.
put
(
"app_name"
,
appName
);
dataMap
.
put
(
"app_package"
,
appPackage
);
dataMap
.
put
(
"app_package"
,
appPackage
);
dataMap
.
put
(
"db_name"
,
dbName
+
"_test"
);
dataMap
.
put
(
"db_name"
,
dbName
+
"_test"
);
...
...
src/main/java/com/smart/generator/command/impl/CreateCRUDCommand.java
0 → 100644
浏览文件 @
f5789d4d
package
com.smart.generator.command.impl
;
import
com.smart.generator.command.Command
;
public
class
CreateCRUDCommand
extends
Command
{
private
String
appPath
;
private
String
crudName
;
@Override
public
int
getParamsLength
()
{
return
2
;
}
@Override
public
void
initVariables
(
String
...
params
)
{
// 获取命令参数
appPath
=
params
[
0
];
crudName
=
params
[
1
];
}
@Override
public
void
generateFiles
()
{
// 创建 Entity
generateEntity
();
// 创建 Service
generateService
();
// 创建 Action
generateAction
();
// 创建 Page
generatePage
();
}
private
void
generateEntity
()
{
Command
command
=
new
CreateEntityCommand
();
command
.
initVariables
(
appPath
,
crudName
);
command
.
generateFiles
();
}
private
void
generateService
()
{
Command
command
=
new
CreateServiceCommand
();
command
.
initVariables
(
appPath
,
crudName
);
command
.
generateFiles
();
}
private
void
generateAction
()
{
Command
command
=
new
CreateActionCommand
();
command
.
initVariables
(
appPath
,
crudName
);
command
.
generateFiles
();
}
private
void
generatePage
()
{
String
[]
pageNames
=
{
crudName
,
crudName
+
"-create"
,
crudName
+
"-edit"
,
crudName
+
"-view"
,
};
Command
command
;
for
(
String
pageName
:
pageNames
)
{
command
=
new
CreatePageCommand
();
command
.
initVariables
(
appPath
,
pageName
);
command
.
generateFiles
();
}
}
}
src/main/java/com/smart/generator/command/CreateEntityCommand.java
→
src/main/java/com/smart/generator/command/
impl/
CreateEntityCommand.java
浏览文件 @
f5789d4d
package
com.smart.generator.command
;
package
com.smart.generator.command
.impl
;
import
com.smart.generator.command.Command
;
import
com.smart.generator.util.VelocityUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
...
...
src/main/java/com/smart/generator/command/CreatePageCommand.java
→
src/main/java/com/smart/generator/command/
impl/
CreatePageCommand.java
浏览文件 @
f5789d4d
package
com.smart.generator.command
;
package
com.smart.generator.command
.impl
;
import
com.smart.generator.command.Command
;
import
com.smart.generator.util.VelocityUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -28,17 +29,22 @@ public class CreatePageCommand extends Command {
...
@@ -28,17 +29,22 @@ public class CreatePageCommand extends Command {
}
}
private
void
generatePage
()
{
private
void
generatePage
()
{
// // 定义相关变量
// 获取应用名称
// String pageNameUnderline = getUnderlineName(pageName);
String
appName
=
getAppName
(
appPath
);
//
// // 创建数据
// 定义相关变量
// Map<String, Object> dataMap = new HashMap<String, Object>();
String
appNameDisplay
=
getDisplayName
(
appName
);
// dataMap.put("app_name_d", appNameDisplay);
String
pageNameDisplay
=
getDisplayName
(
pageName
);
// dataMap.put("page_name_d", pageNameDisplay);
String
pageNameUnderline
=
getUnderlineName
(
pageName
);
//
// // 生成文件
// 创建数据
// String vmPath = "create-page/entity.java.vm";
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
// String filePath = appPath + "/src/main/webapp/www/page/" + pageNameUnderline + ".html";
dataMap
.
put
(
"app_name_d"
,
appNameDisplay
);
// VelocityUtil.mergeTemplateIntoFile(vmPath, dataMap, filePath);
dataMap
.
put
(
"page_name_d"
,
pageNameDisplay
);
// 生成文件
String
vmPath
=
"create-page/page.html.vm"
;
String
filePath
=
appPath
+
"/src/main/webapp/www/page/"
+
pageNameUnderline
+
".html"
;
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
}
}
}
}
src/main/java/com/smart/generator/command/CreateServiceCommand.java
→
src/main/java/com/smart/generator/command/
impl/
CreateServiceCommand.java
浏览文件 @
f5789d4d
package
com.smart.generator.command
;
package
com.smart.generator.command
.impl
;
import
com.smart.generator.command.Command
;
import
com.smart.generator.util.VelocityUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.Map
;
import
java.util.Map
;
...
@@ -44,14 +45,14 @@ public class CreateServiceCommand extends Command {
...
@@ -44,14 +45,14 @@ public class CreateServiceCommand extends Command {
private
void
generateServiceInterface
(
String
packageName
,
String
serviceNameCamelhump
,
Map
<
String
,
Object
>
dataMap
)
{
private
void
generateServiceInterface
(
String
packageName
,
String
serviceNameCamelhump
,
Map
<
String
,
Object
>
dataMap
)
{
// 生成 Service 接口
// 生成 Service 接口
String
vmPath
=
"create-service/service.java.vm"
;
String
vmPath
=
"create-service/service.java.vm"
;
String
filePath
=
appPath
+
"/src/main/java/"
+
packageName
+
"/service/"
+
serviceNameCamelhump
+
".java"
;
String
filePath
=
appPath
+
"/src/main/java/"
+
packageName
+
"/service/"
+
serviceNameCamelhump
+
"
Service
.java"
;
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
}
}
private
void
generateServiceImplement
(
String
packageName
,
String
serviceNameCamelhump
,
Map
<
String
,
Object
>
dataMap
)
{
private
void
generateServiceImplement
(
String
packageName
,
String
serviceNameCamelhump
,
Map
<
String
,
Object
>
dataMap
)
{
// 生成 Service 实现
// 生成 Service 实现
String
vmPath
=
"create-service/service.impl.java.vm"
;
String
vmPath
=
"create-service/service.impl.java.vm"
;
String
filePath
=
appPath
+
"/src/main/java/"
+
packageName
+
"/service/impl/"
+
serviceNameCamelhump
+
"Impl.java"
;
String
filePath
=
appPath
+
"/src/main/java/"
+
packageName
+
"/service/impl/"
+
serviceNameCamelhump
+
"
Service
Impl.java"
;
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
}
}
}
}
src/main/java/com/smart/generator/command/impl/LoadDictCommand.java
0 → 100644
浏览文件 @
f5789d4d
package
com.smart.generator.command.impl
;
import
com.smart.framework.util.StringUtil
;
import
com.smart.generator.bean.Column
;
import
com.smart.generator.bean.Table
;
import
com.smart.generator.command.impl.builder.Builder
;
import
com.smart.generator.command.impl.builder.impl.EntityBuilder
;
import
com.smart.generator.command.impl.builder.impl.SQLBuilder
;
import
com.smart.generator.command.Command
;
import
java.io.File
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.LinkedHashMap
;
import
java.util.List
;
import
java.util.Map
;
import
jxl.Sheet
;
import
jxl.Workbook
;
import
jxl.read.biff.BiffException
;
import
org.apache.log4j.Logger
;
public
class
LoadDictCommand
extends
Command
{
private
static
final
Logger
logger
=
Logger
.
getLogger
(
LoadDictCommand
.
class
);
private
String
appPath
;
private
String
dictPath
;
@Override
public
int
getParamsLength
()
{
// 返回参数个数
return
2
;
}
@Override
public
void
initVariables
(
String
...
params
)
{
// 获取命令参数
appPath
=
params
[
0
];
dictPath
=
params
[
1
];
}
@Override
public
void
generateFiles
()
{
// 获取应用信息
String
appName
=
getAppName
(
appPath
);
String
appPackage
=
getAppPackage
(
appPath
);
// 获取 Excel 表格数据
Map
<
Table
,
List
<
Column
>>
tableMap
=
createTableMap
(
dictPath
);
// 生成 SQL
generateSQL
(
tableMap
,
appName
);
// 生成 Enttiy
generateEntity
(
tableMap
,
appPackage
);
}
private
void
generateSQL
(
Map
<
Table
,
List
<
Column
>>
tableMap
,
String
appName
)
{
// 获取相关数据
String
outputPath
=
appPath
+
"/doc"
;
// 生成代码
Builder
sqlBuilder
=
new
SQLBuilder
(
outputPath
,
tableMap
,
appName
);
sqlBuilder
.
build
();
}
private
void
generateEntity
(
Map
<
Table
,
List
<
Column
>>
tableMap
,
String
appPackage
)
{
// 获取相关数据
String
outputPath
=
appPath
+
"/src/main/java/"
+
appPackage
.
replace
(
'.'
,
'/'
)
+
"/entity"
;
String
packageName
=
appPackage
+
".entity"
;
// 生成代码
Builder
entityBuilder
=
new
EntityBuilder
(
outputPath
,
tableMap
,
packageName
);
entityBuilder
.
build
();
}
private
Map
<
Table
,
List
<
Column
>>
createTableMap
(
String
inputPath
)
{
// 定义一个 Table Map,用于建立表与列的一对多映射关系
Map
<
Table
,
List
<
Column
>>
tableMap
=
new
LinkedHashMap
<
Table
,
List
<
Column
>>();
// 定义 Workbook,表示整个 Excel 文件
Workbook
workbook
=
null
;
try
{
// 获取 Workbook
workbook
=
Workbook
.
getWorkbook
(
new
File
(
inputPath
));
// 处理 Workbook
handleWorkbook
(
workbook
,
tableMap
);
}
catch
(
IOException
e
)
{
logger
.
error
(
"读取 Excel 出错!"
,
e
);
throw
new
RuntimeException
(
e
);
}
catch
(
BiffException
e
)
{
logger
.
error
(
"解析 Excel 出错!"
,
e
);
throw
new
RuntimeException
(
e
);
}
finally
{
// 释放资源
if
(
workbook
!=
null
)
{
workbook
.
close
();
}
}
return
tableMap
;
}
private
void
handleWorkbook
(
Workbook
workbook
,
Map
<
Table
,
List
<
Column
>>
tableMap
)
{
// 读取 Workbook(从第二个开始)
for
(
int
i
=
1
;
i
<
workbook
.
getNumberOfSheets
();
i
++)
{
// 获取 Sheet
Sheet
sheet
=
workbook
.
getSheet
(
i
);
// 处理 Sheet
handleSheet
(
sheet
,
tableMap
);
}
}
private
void
handleSheet
(
Sheet
sheet
,
Map
<
Table
,
List
<
Column
>>
tableMap
)
{
// 获取表名
String
tableName
=
sheet
.
getName
().
toLowerCase
();
// 定义表主键
String
tablePK
=
""
;
// 定义一个 Column List,用于封装 Sheet 数据
List
<
Column
>
columnList
=
new
ArrayList
<
Column
>();
// 读取 Sheet(从第二行开始)
for
(
int
row
=
1
;
row
<
sheet
.
getRows
();
row
++)
{
// 获取 Cell 数据
String
name
=
getData
(
sheet
,
0
,
row
);
String
type
=
getData
(
sheet
,
1
,
row
);
String
length
=
getData
(
sheet
,
2
,
row
);
String
precision
=
getData
(
sheet
,
3
,
row
);
String
notnull
=
getData
(
sheet
,
4
,
row
);
String
pk
=
getData
(
sheet
,
5
,
row
);
String
comment
=
getData
(
sheet
,
6
,
row
);
// 将 Cell 数据封装为 Column,并添加到 Column List 中
columnList
.
add
(
new
Column
(
name
,
type
,
length
,
precision
,
notnull
,
pk
,
comment
));
// 初始化表主键
if
(
StringUtil
.
isNotEmpty
(
pk
))
{
tablePK
=
name
;
}
}
// 将 Sheet 数据封装为 Table,并添加到 Table Map 中
tableMap
.
put
(
new
Table
(
tableName
,
tablePK
),
columnList
);
}
private
String
getData
(
Sheet
sheet
,
int
column
,
int
row
)
{
// 获取 Cell 数据,去除了前后空格
return
sheet
.
getCell
(
column
,
row
).
getContents
().
trim
();
}
}
src/main/java/com/smart/generator/builder/Builder.java
→
src/main/java/com/smart/generator/
command/impl/
builder/Builder.java
浏览文件 @
f5789d4d
package
com.smart.generator.builder
;
package
com.smart.generator.
command.impl.
builder
;
import
com.smart.generator.bean.Column
;
import
com.smart.generator.bean.Column
;
import
com.smart.generator.bean.Table
;
import
com.smart.generator.bean.Table
;
...
@@ -15,12 +15,5 @@ public abstract class Builder {
...
@@ -15,12 +15,5 @@ public abstract class Builder {
this
.
tableMap
=
tableMap
;
this
.
tableMap
=
tableMap
;
}
}
public
final
void
build
()
{
public
abstract
void
build
();
createFile
();
generateCode
();
}
public
abstract
void
createFile
();
public
abstract
void
generateCode
();
}
}
src/main/java/com/smart/generator/
builder
/EntityBuilder.java
→
src/main/java/com/smart/generator/
command/impl/builder/impl
/EntityBuilder.java
浏览文件 @
f5789d4d
package
com.smart.generator.
builder
;
package
com.smart.generator.
command.impl.builder.impl
;
import
com.smart.framework.util.FileUtil
;
import
com.smart.framework.util.FileUtil
;
import
com.smart.framework.util.StringUtil
;
import
com.smart.framework.util.StringUtil
;
import
com.smart.generator.bean.Column
;
import
com.smart.generator.bean.Column
;
import
com.smart.generator.bean.Field
;
import
com.smart.generator.bean.Field
;
import
com.smart.generator.bean.Table
;
import
com.smart.generator.bean.Table
;
import
com.smart.generator.command.impl.builder.Builder
;
import
com.smart.generator.util.VelocityUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
...
@@ -44,7 +45,6 @@ public class EntityBuilder extends Builder {
...
@@ -44,7 +45,6 @@ public class EntityBuilder extends Builder {
typeMap
.
put
(
"text"
,
"String"
);
typeMap
.
put
(
"text"
,
"String"
);
}
}
private
String
javaPath
=
outputPath
+
"/java"
;
private
String
packageName
;
private
String
packageName
;
public
EntityBuilder
(
String
outputPath
,
Map
<
Table
,
List
<
Column
>>
tableMap
,
String
packageName
)
{
public
EntityBuilder
(
String
outputPath
,
Map
<
Table
,
List
<
Column
>>
tableMap
,
String
packageName
)
{
...
@@ -53,30 +53,33 @@ public class EntityBuilder extends Builder {
...
@@ -53,30 +53,33 @@ public class EntityBuilder extends Builder {
}
}
@Override
@Override
public
void
createFile
()
{
public
void
build
()
{
FileUtil
.
createFile
(
javaPath
);
FileUtil
.
createFile
(
outputPath
);
}
@Override
public
void
generateCode
()
{
for
(
Map
.
Entry
<
Table
,
List
<
Column
>>
entry
:
tableMap
.
entrySet
())
{
for
(
Map
.
Entry
<
Table
,
List
<
Column
>>
entry
:
tableMap
.
entrySet
())
{
// 定义相关变量
Table
table
=
entry
.
getKey
();
Table
table
=
entry
.
getKey
();
String
tableName
=
table
.
getName
();
String
tableName
=
table
.
getName
();
String
entityName
=
StringUtil
.
firstToUpper
(
StringUtil
.
toCamelhump
(
tableName
));
String
entityName
=
StringUtil
.
firstToUpper
(
StringUtil
.
toCamelhump
(
tableName
));
List
<
Column
>
columnList
=
entry
.
getValue
();
List
<
Column
>
columnList
=
entry
.
getValue
();
List
<
Field
>
fieldList
=
transformFieldList
(
columnList
);
List
<
Field
>
fieldList
=
transformFieldList
(
columnList
);
// 创建数据
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
dataMap
.
put
(
"packageName"
,
packageName
);
dataMap
.
put
(
"packageName"
,
packageName
);
dataMap
.
put
(
"entityName"
,
entityName
);
dataMap
.
put
(
"entityName"
,
entityName
);
dataMap
.
put
(
"fieldList"
,
fieldList
);
dataMap
.
put
(
"fieldList"
,
fieldList
);
dataMap
.
put
(
"StringUtil"
,
new
StringUtil
());
dataMap
.
put
(
"StringUtil"
,
new
StringUtil
());
VelocityUtil
.
mergeTemplateIntoFile
(
"vm/init-app/entity.java.vm"
,
dataMap
,
javaPath
+
"/"
+
entityName
+
".java"
);
// 生成文件
String
vmPath
=
"load-dict/entity.java.vm"
;
String
filePath
=
outputPath
+
"/"
+
entityName
+
".java"
;
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
}
}
}
}
private
List
<
Field
>
transformFieldList
(
List
<
Column
>
columnList
)
{
private
List
<
Field
>
transformFieldList
(
List
<
Column
>
columnList
)
{
// 将 Column List 转换为 Field List
List
<
Field
>
fieldList
=
new
ArrayList
<
Field
>(
columnList
.
size
());
List
<
Field
>
fieldList
=
new
ArrayList
<
Field
>(
columnList
.
size
());
for
(
Column
column
:
columnList
)
{
for
(
Column
column
:
columnList
)
{
String
fieldName
=
this
.
transformFieldName
(
column
.
getName
());
String
fieldName
=
this
.
transformFieldName
(
column
.
getName
());
...
@@ -88,6 +91,7 @@ public class EntityBuilder extends Builder {
...
@@ -88,6 +91,7 @@ public class EntityBuilder extends Builder {
}
}
private
String
transformFieldName
(
String
columnName
)
{
private
String
transformFieldName
(
String
columnName
)
{
// 将 Column Name 转换为 Field Name
String
fieldName
;
String
fieldName
;
if
(
keywordList
.
contains
(
columnName
))
{
if
(
keywordList
.
contains
(
columnName
))
{
fieldName
=
columnName
+
"_"
;
fieldName
=
columnName
+
"_"
;
...
@@ -98,6 +102,7 @@ public class EntityBuilder extends Builder {
...
@@ -98,6 +102,7 @@ public class EntityBuilder extends Builder {
}
}
private
String
transformFieldType
(
String
columnType
)
{
private
String
transformFieldType
(
String
columnType
)
{
// 将 Column Type 转换为 Field Type
String
fieldType
;
String
fieldType
;
if
(
typeMap
.
containsKey
(
columnType
))
{
if
(
typeMap
.
containsKey
(
columnType
))
{
fieldType
=
typeMap
.
get
(
columnType
);
fieldType
=
typeMap
.
get
(
columnType
);
...
...
src/main/java/com/smart/generator/
builder
/SQLBuilder.java
→
src/main/java/com/smart/generator/
command/impl/builder/impl
/SQLBuilder.java
浏览文件 @
f5789d4d
package
com.smart.generator.
builder
;
package
com.smart.generator.
command.impl.builder.impl
;
import
com.smart.framework.util.FileUtil
;
import
com.smart.framework.util.FileUtil
;
import
com.smart.generator.bean.Column
;
import
com.smart.generator.bean.Column
;
import
com.smart.generator.bean.Table
;
import
com.smart.generator.bean.Table
;
import
com.smart.generator.command.impl.builder.Builder
;
import
com.smart.generator.util.VelocityUtil
;
import
com.smart.generator.util.VelocityUtil
;
import
java.util.HashMap
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.List
;
...
@@ -10,22 +11,22 @@ import java.util.Map;
...
@@ -10,22 +11,22 @@ import java.util.Map;
public
class
SQLBuilder
extends
Builder
{
public
class
SQLBuilder
extends
Builder
{
private
String
sqlPath
=
outputPath
+
"/sql"
;
private
String
appName
;
public
SQLBuilder
(
String
outputPath
,
Map
<
Table
,
List
<
Column
>>
tableMap
)
{
public
SQLBuilder
(
String
outputPath
,
Map
<
Table
,
List
<
Column
>>
tableMap
,
String
appName
)
{
super
(
outputPath
,
tableMap
);
super
(
outputPath
,
tableMap
);
this
.
appName
=
appName
;
}
}
@Override
@Override
public
void
createFile
()
{
public
void
build
()
{
FileUtil
.
createFile
(
sqlPath
);
FileUtil
.
createFile
(
outputPath
);
}
@Override
public
void
generateCode
()
{
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
Map
<
String
,
Object
>
dataMap
=
new
HashMap
<
String
,
Object
>();
dataMap
.
put
(
"tableMap"
,
tableMap
);
dataMap
.
put
(
"tableMap"
,
tableMap
);
VelocityUtil
.
mergeTemplateIntoFile
(
"vm/init-app/table.sql.vm"
,
dataMap
,
sqlPath
+
"/schema.sql"
);
String
vmPath
=
"load-dict/table.sql.vm"
;
String
filePath
=
outputPath
+
"/"
+
appName
+
".sql"
;
VelocityUtil
.
mergeTemplateIntoFile
(
vmPath
,
dataMap
,
filePath
);
}
}
}
}
src/test/java/com.smart.generator.test/CommandTest.java
浏览文件 @
f5789d4d
package
com.smart.generator.test
;
package
com.smart.generator.test
;
import
com.smart.generator.command.CreateActionCommand
;
import
com.smart.generator.command.impl.CreateActionCommand
;
import
com.smart.generator.command.CreateAppCommand
;
import
com.smart.generator.command.impl.CreateAppCommand
;
import
com.smart.generator.command.CreateEntityCommand
;
import
com.smart.generator.command.impl.CreateCRUDCommand
;
import
com.smart.generator.command.CreateServiceCommand
;
import
com.smart.generator.command.impl.CreateEntityCommand
;
import
com.smart.generator.command.impl.CreatePageCommand
;
import
com.smart.generator.command.impl.CreateServiceCommand
;
import
com.smart.generator.command.Invoker
;
import
com.smart.generator.command.Invoker
;
import
com.smart.generator.command.impl.LoadDictCommand
;
import
org.junit.Test
;
import
org.junit.Test
;
public
class
CommandTest
{
public
class
CommandTest
{
@Test
@Test
public
void
createAppTest
()
{
public
void
createApp
Command
Test
()
{
Invoker
invoker
=
new
Invoker
();
Invoker
invoker
=
new
Invoker
();
invoker
.
setCommand
(
new
CreateAppCommand
());
// smart create-app
invoker
.
setCommand
(
new
CreateAppCommand
());
// smart create-app
...
@@ -18,7 +21,6 @@ public class CommandTest {
...
@@ -18,7 +21,6 @@ public class CommandTest {
"C:\\Smart"
,
// Current Path
"C:\\Smart"
,
// Current Path
"demo"
,
// App Name
"demo"
,
// App Name
"com.smart"
,
// App Group
"com.smart"
,
// App Group
"demo"
,
// App Artifact = <App Name>
"com.smart.demo"
// App Package = <App Group> + <App Artifact>
"com.smart.demo"
// App Package = <App Group> + <App Artifact>
};
};
...
@@ -29,9 +31,9 @@ public class CommandTest {
...
@@ -29,9 +31,9 @@ public class CommandTest {
}
}
@Test
@Test
public
void
createEntityTest
()
{
public
void
createEntity
Command
Test
()
{
Invoker
invoker
=
new
Invoker
();
Invoker
invoker
=
new
Invoker
();
invoker
.
setCommand
(
new
CreateEntityCommand
());
// smart create-entity
invoker
.
setCommand
(
new
CreateEntityCommand
());
// smart create-entity
<entity-name>
String
[]
params
=
{
String
[]
params
=
{
"C:\\Smart\\demo"
,
// Current Path
"C:\\Smart\\demo"
,
// Current Path
...
@@ -45,9 +47,9 @@ public class CommandTest {
...
@@ -45,9 +47,9 @@ public class CommandTest {
}
}
@Test
@Test
public
void
createServiceTest
()
{
public
void
createService
Command
Test
()
{
Invoker
invoker
=
new
Invoker
();
Invoker
invoker
=
new
Invoker
();
invoker
.
setCommand
(
new
CreateServiceCommand
());
// smart create-service
invoker
.
setCommand
(
new
CreateServiceCommand
());
// smart create-service
<service-name>
String
[]
params
=
{
String
[]
params
=
{
"C:\\Smart\\demo"
,
// Current Path
"C:\\Smart\\demo"
,
// Current Path
...
@@ -61,9 +63,9 @@ public class CommandTest {
...
@@ -61,9 +63,9 @@ public class CommandTest {
}
}
@Test
@Test
public
void
createActionTest
()
{
public
void
createAction
Command
Test
()
{
Invoker
invoker
=
new
Invoker
();
Invoker
invoker
=
new
Invoker
();
invoker
.
setCommand
(
new
CreateActionCommand
());
// smart create-action
invoker
.
setCommand
(
new
CreateActionCommand
());
// smart create-action
<action-name>
String
[]
params
=
{
String
[]
params
=
{
"C:\\Smart\\demo"
,
// Current Path
"C:\\Smart\\demo"
,
// Current Path
...
@@ -75,4 +77,52 @@ public class CommandTest {
...
@@ -75,4 +77,52 @@ public class CommandTest {
System
.
err
.
println
(
"执行命令出错!"
);
System
.
err
.
println
(
"执行命令出错!"
);
}
}
}
}
@Test
public
void
createPageCommandTest
()
{
Invoker
invoker
=
new
Invoker
();
invoker
.
setCommand
(
new
CreatePageCommand
());
// smart create-page <page-name>
String
[]
params
=
{
"C:\\Smart\\demo"
,
// Current Path
"product"
,
// Page Name
};
boolean
result
=
invoker
.
execCommand
(
params
);
if
(!
result
)
{
System
.
err
.
println
(
"执行命令出错!"
);
}
}
@Test
public
void
createCRUDCommandTest
()
{
Invoker
invoker
=
new
Invoker
();
invoker
.
setCommand
(
new
CreateCRUDCommand
());
// smart create-crud <crud-name>
String
[]
params
=
{
"C:\\Smart\\demo"
,
// Current Path
"product"
,
// Page Name
};
boolean
result
=
invoker
.
execCommand
(
params
);
if
(!
result
)
{
System
.
err
.
println
(
"执行命令出错!"
);
}
}
@Test
public
void
loadDictCommandTest
()
{
Invoker
invoker
=
new
Invoker
();
invoker
.
setCommand
(
new
LoadDictCommand
());
// smart load-dict <dict-path>
String
[]
params
=
{
"C:\\Smart\\demo"
,
// Current Path
"C:\\Smart\\db.xls"
,
// Dict Path
};
boolean
result
=
invoker
.
execCommand
(
params
);
if
(!
result
)
{
System
.
err
.
println
(
"执行命令出错!"
);
}
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录