Skip to content

Commit e800911

Browse files
committed
add > new feature for issue #32
1 parent 069c318 commit e800911

File tree

1 file changed

+39
-34
lines changed

1 file changed

+39
-34
lines changed

src/test/java/CodeGenerator.java

Lines changed: 39 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import com.google.common.base.CaseFormat;
12
import freemarker.template.TemplateExceptionHandler;
3+
import org.apache.commons.lang3.StringUtils;
24
import org.mybatis.generator.api.MyBatisGenerator;
35
import org.mybatis.generator.config.*;
46
import org.mybatis.generator.internal.DefaultShellCallback;
@@ -36,18 +38,34 @@ public class CodeGenerator {
3638

3739
public static void main(String[] args) {
3840
genCode("输入表名");
41+
//genCode("输入表名","输入自定义Model名称");
3942
}
4043

44+
/**
45+
* 通过数据表名称生成代码,Model 名称通过解析数据表名称获得,下划线转大驼峰的形式。
46+
* 如输入表名称 "t_user_detail" 将生成 TUserDetail、TUserDetailMapper、TUserDetailService ...
47+
* @param tableNames 数据表名称...
48+
*/
4149
public static void genCode(String... tableNames) {
4250
for (String tableName : tableNames) {
43-
//根据需求生成,不需要的注掉,模板有问题的话可以自己修改。
44-
genModelAndMapper(tableName);
45-
genService(tableName);
46-
genController(tableName);
51+
genCode(tableName, null);
4752
}
4853
}
4954

50-
public static void genModelAndMapper(String tableName) {
55+
/**
56+
* 通过数据表名称,和自定义的 Model 名称生成代码
57+
* 如输入表名称 "t_user_detail" 和自定义的 Model 名称 "User" 将生成 User、UserMapper、UserService ...
58+
* @param tableName 数据表名称
59+
* @param modelName 自定义的 Model 名称
60+
*/
61+
public static void genCode(String tableName, String modelName) {
62+
genModelAndMapper(tableName, modelName);
63+
genService(tableName, modelName);
64+
genController(tableName, modelName);
65+
}
66+
67+
68+
public static void genModelAndMapper(String tableName, String modelName) {
5169
Context context = new Context(ModelType.FLAT);
5270
context.setId("Potato");
5371
context.setTargetRuntime("MyBatis3Simple");
@@ -84,6 +102,7 @@ public static void genModelAndMapper(String tableName) {
84102

85103
TableConfiguration tableConfiguration = new TableConfiguration(context);
86104
tableConfiguration.setTableName(tableName);
105+
tableConfiguration.setDomainObjectName(modelName);
87106
tableConfiguration.setGeneratedKey(new GeneratedKey("id", "Mysql", true, null));
88107
context.addTableConfiguration(tableConfiguration);
89108

@@ -106,21 +125,20 @@ public static void genModelAndMapper(String tableName) {
106125
if (generator.getGeneratedJavaFiles().isEmpty() || generator.getGeneratedXmlFiles().isEmpty()) {
107126
throw new RuntimeException("生成Model和Mapper失败:" + warnings);
108127
}
109-
110-
String modelName = tableNameConvertUpperCamel(tableName);
128+
if (StringUtils.isEmpty(modelName)) modelName = tableNameConvertUpperCamel(tableName);
111129
System.out.println(modelName + ".java 生成成功");
112130
System.out.println(modelName + "Mapper.java 生成成功");
113131
System.out.println(modelName + "Mapper.xml 生成成功");
114132
}
115133

116-
public static void genService(String tableName) {
134+
public static void genService(String tableName, String modelName) {
117135
try {
118136
freemarker.template.Configuration cfg = getConfiguration();
119137

120138
Map<String, Object> data = new HashMap<>();
121139
data.put("date", DATE);
122140
data.put("author", AUTHOR);
123-
String modelNameUpperCamel = tableNameConvertUpperCamel(tableName);
141+
String modelNameUpperCamel = StringUtils.isEmpty(modelName) ? tableNameConvertUpperCamel(tableName) : modelName;
124142
data.put("modelNameUpperCamel", modelNameUpperCamel);
125143
data.put("modelNameLowerCamel", tableNameConvertLowerCamel(tableName));
126144
data.put("basePackage", BASE_PACKAGE);
@@ -145,17 +163,17 @@ public static void genService(String tableName) {
145163
}
146164
}
147165

148-
public static void genController(String tableName) {
166+
public static void genController(String tableName, String modelName) {
149167
try {
150168
freemarker.template.Configuration cfg = getConfiguration();
151169

152170
Map<String, Object> data = new HashMap<>();
153171
data.put("date", DATE);
154172
data.put("author", AUTHOR);
155-
data.put("baseRequestMapping", tableNameConvertMappingPath(tableName));
156-
String modelNameUpperCamel = tableNameConvertUpperCamel(tableName);
173+
String modelNameUpperCamel = StringUtils.isEmpty(modelName) ? tableNameConvertUpperCamel(tableName) : modelName;
174+
data.put("baseRequestMapping", modelNameConvertMappingPath(modelNameUpperCamel));
157175
data.put("modelNameUpperCamel", modelNameUpperCamel);
158-
data.put("modelNameLowerCamel", tableNameConvertLowerCamel(tableName));
176+
data.put("modelNameLowerCamel", CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, modelNameUpperCamel));
159177
data.put("basePackage", BASE_PACKAGE);
160178

161179
File file = new File(PROJECT_PATH + JAVA_PATH + PACKAGE_PATH_CONTROLLER + modelNameUpperCamel + "Controller.java");
@@ -181,30 +199,11 @@ private static freemarker.template.Configuration getConfiguration() throws IOExc
181199
}
182200

183201
private static String tableNameConvertLowerCamel(String tableName) {
184-
StringBuilder result = new StringBuilder();
185-
if (tableName != null && tableName.length() > 0) {
186-
tableName = tableName.toLowerCase();//兼容使用大写的表名
187-
boolean flag = false;
188-
for (int i = 0; i < tableName.length(); i++) {
189-
char ch = tableName.charAt(i);
190-
if ("_".charAt(0) == ch) {
191-
flag = true;
192-
} else {
193-
if (flag) {
194-
result.append(Character.toUpperCase(ch));
195-
flag = false;
196-
} else {
197-
result.append(ch);
198-
}
199-
}
200-
}
201-
}
202-
return result.toString();
202+
return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, tableName.toLowerCase());
203203
}
204204

205205
private static String tableNameConvertUpperCamel(String tableName) {
206-
String camel = tableNameConvertLowerCamel(tableName);
207-
return camel.substring(0, 1).toUpperCase() + camel.substring(1);
206+
return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, tableName.toLowerCase());
208207

209208
}
210209

@@ -213,7 +212,13 @@ private static String tableNameConvertMappingPath(String tableName) {
213212
return "/" + (tableName.contains("_") ? tableName.replaceAll("_", "/") : tableName);
214213
}
215214

215+
private static String modelNameConvertMappingPath(String modelName) {
216+
String tableName = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, modelName);
217+
return tableNameConvertMappingPath(tableName);
218+
}
219+
216220
private static String packageConvertPath(String packageName) {
217221
return String.format("/%s/", packageName.contains(".") ? packageName.replaceAll("\\.", "/") : packageName);
218222
}
223+
219224
}

0 commit comments

Comments
 (0)