Builder.java
13.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
package com.sibu.builder.template;
import java.io.File;
import java.sql.Connection;
import java.util.List;
import com.jolbox.bonecp.BoneCPDataSource;
import com.sibu.orderHelper.common.builder.BuidSpringUtil;
import com.sibu.orderHelper.common.builder.bean.BuilderBean;
import com.sibu.orderHelper.common.builder.bean.FieldBean;
import com.sibu.orderHelper.common.builder.bean.JavaCodeBean;
import com.sibu.orderHelper.common.builder.util.AutoCompleteUtil;
/**
* 自动完成代码工具类<br>
*
* 当前版本:1.15<br>
* 主要对后台的代码文件进行自动生成。 下一版本:<br>
* 对jsp页面的代码也会自动生成。
*
* 最终实现功能:<br>
* 1、要实现输入必要参数后,直接生成基本模块的增删改查代码文件并功能可用。<br>
* 2、代码需要设置模板化,调整生成的代码只需要调整模板就行了。<br>
*
* Version 1.15 2013-07-11 <br>
* 1、为了方面模块化生成代码,讲模板代码的主包名和生成代码存放的主包名进行了抽离配置。<br>
*
* Version 1.15 2013-07-11 <br>
* 1、代码耦合度调整,抽离工具类。方便多个项目应用时,统一进行修改<br>
*
* Version 1.15 2013-07-11 <br>
* 1、代码耦合度调整,抽离工具类。方便多个项目应用时,统一进行修改<br>
*
* Version 1.14 2013-06-29 <br>
* 1、重新调整了Builder参数<br>
*
* Version 1.13 2013-06-29 <br>
* 1、新增了自动生成ibatis配置文件功能;<br>
*
* Version 1.12 2013-06-29 <br>
* 1、新增了自动生成bean类功能;<br>
*
* Version 1.11 2013-06-29 <br>
* 1、新增了获取数据库连接功能;<br>
* 2、新增了自动生成Fields类功能<br>
* 3、新增了批量自动生成所有表的Fields类功能<br>
* 4、新增了获取表的所有字段信息功能<br>
*
* Version 1.10 2013-06-20 <br>
* 1、分离了Bean类,让代码结构更加清晰
*
* Version 1.9 2013-06-20 <br>
* 1、分离代码工具类AutoCompleteUtil.java和代码逻辑处理类Builder.java
*
* Version 1.8 2013-06-20 <br>
* 1、增加模板功能,生成的代码可以通过编辑模板代码进行调整
*
* Version 1.7 2013-06-18 <br>
* 1、增加了是否创建java文件的控制变量
*
* Version 1.6 2013-06-18 <br>
* 1、调整Action生成的代码,解决保存和更新数据是记录当前操作用户信息的问题。
*
* Version 1.5 2013-06-17 <br>
* 1、解决java名字和属性名字冲突的问题
*
* Version 1.4 2013-06-17 <br>
* 1、增加List的查询和search的查询代码。list查询则返回beanList;search则返回hashMapList<br>
*
* Version 1.3 2013-06-15 <br>
* 1、增加了Ibatis配置文件的count和select语句的代码生成。<br>
*
* Version 1.2 2013-06-15 <br>
* 1、增加了自动生成java文件的功能。<br>
* 2、可设置是否覆盖原有的java文件,是否在控制台输出生成过程,是否在控制台输出代码。<br>
*
* Version 1.1 2013-06-13 <br>
* 1、修改了批量删除的代码<br>
*
* Version 1.0 2013-06-13 <br>
* 目前可以在控制台输出生成的代码,可直接运行main方法在控制台查看效果。<br>
* 只输出到控制台,不会更改任何现有代码。<br>
* 1、自动生成Ibatis配置文件的部分代码:insert,update,delete<br>
* 2、自动生成Cache代码<br>
* 3、自动生成IDao代码<br>
* 4、自动生成DaoImpl代码<br>
* 5、自动生成IService代码<br>
* 6、自动生成ServiceImpl代码<br>
* 7、自动生成Action代码<br>
*/
public class Builder {
/** 生成器参数Bean类 */
private static BuilderBean builderBean;
/** 生成器工具类 */
private static AutoCompleteUtil util;
/** 数据库连接 */
private static Connection conn;
/** 数据库连接beanID */
private static String dateSourceBeanId = "dataSource";
//private static String dateSourceBeanId = "data2Source";
static {
/** 构造生成器参数类 */
builderBean = new BuilderBean();
/** 源码根目录 */
builderBean.setSrcPath(System.getProperty("user.dir") + File.separator + "src" + File.separator + "main"+ File.separator + "java");
/** 设置使用标签作为字段名 */
builderBean.setUseLable(true);
/** 是否debug模式 */
builderBean.setDebug(true);
/** 是否在控制台显示生成的代码 */
builderBean.setShowCode(true);
/** 是否创建代码文件:true表示创建;false表示不创建 */
builderBean.setCreate(true);
/** 是否覆盖源文件:true表示覆盖;false表示不覆盖; */
builderBean.setCover(false);
/** 模板代码存放的主包名 */
builderBean.setTemplateMainPackageName("com.sibu.builder.template");
/** 生成代码存放的主包名 */
builderBean.setTargetMainPackageName("com.sibu.orderHelper.integral.model");
// TODO 在这里修改必要参数
/** 作者 */
builderBean.setAuthor("xiaoheliu");
/** 主名字 */
builderBean.setMyName("Coupon");
/** 表名 */
builderBean.setTableName("coupon");
/** ID名 */
builderBean.setIdName("id");
/** 构造生成器工具类 */
util = new AutoCompleteUtil(builderBean);
}
/**
* 运行方法
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
createBeanJava(); // 创建数据库表对应的bean类
//createIDaoJava(); //创建dao接口类
//createIServiceJava(); // 创建service接口类
//createServiceImplJava(); // 创建service实现类
// createActionJava(); // 创建action类
//createIbatisXml(); // 创建ibatis配置文件
// createFieldJava(); // 创建数据库表对应的字段枚举类
// createIDaoJava(); // 创建dao接口类
// createAllFieldJava(); //创建数据库中所有表的字段枚举类
}
/**
* 获取数据库连接
*
* @return Connection 数据库连接
* @author
* @throws Exception
* @data 2013-7-11 上午11:16:52
*/
public static Connection getConnection() throws Exception {
if (null == conn) {
conn = ((BoneCPDataSource) BuidSpringUtil.getBeanById(dateSourceBeanId)).getConnection();
}
return conn;
}
/**
* 创建ibatis配置文件
*
* @throws Exception
*/
public static void createIbatisXml() throws Exception {
JavaCodeBean bean = new JavaCodeBean();
bean.setColumnToUpperCase(false);//是否将数据库字段转换成大写
bean.setTemplatePackageName(builderBean.getTemplateMainPackageName()+".dao");//代码模板所在的包路径
bean.setTemplateName("MyName_Mapper");//代码模板的名称
bean.setTemplateFileSuffix(".xml");//代码模板的后缀名
bean.setTargetPackageName(builderBean.getTargetMainPackageName()+".dao");//需要生成的代码的包路径
bean.setTargetName(util.getJavaName(builderBean.getMyName()));//生成代码文件的文件名
bean.setTargetNameSuffix("Mapper");//生成代码文件的文件名后追加名字
bean.setTargetFileSuffix(".xml");//生成代码文件的文件名后缀
String code = util.getCode(bean);
List<FieldBean> beanList = util.getFieldBeanList(builderBean.getTableName(), getConnection());
code = code.replace("myName_", util.getPropertyName(builderBean.getMyName()))
.replace(builderBean.getTemplateMainPackageName()+".dao", bean.getTargetPackageName())
.replace(builderBean.getTemplateMainPackageName()+".bean", builderBean.getTargetMainPackageName()+".bean")
.replace("MyName_", util.getJavaName(builderBean.getMyName())).replace("id_", builderBean.getIdName())
.replace("idName_", util.getPropertyName(builderBean.getIdName()))
.replace("tableName_", builderBean.getTableName());
code = code.replace("<!--resultMapCode-->", util.getResultMapCode(bean, beanList));
code = code.replace("<!--insertFieldsCode-->", util.getIbatisInsertFieldsCode(bean,beanList));
code = code.replace("<!--insertValuesCode-->", util.getIbatisInsertValuesCode(beanList));
code = code.replace("<!--updateSetCode-->", util.getIbatisUpdateSetCode(bean,beanList, builderBean.getIdName()));
util.createJava(bean, code);
}
/**
* 创建所有表的字段对应类
*
* @throws Exception
*/
public static void createAllFieldJava() throws Exception {
List<String> list = util.getTableList(getConnection());
if (null != list && !list.isEmpty()) {
JavaCodeBean bean = null;
for (String name : list) {
bean = new JavaCodeBean();
bean.setTargetPackageName(builderBean.getTargetMainPackageName()+".field");
bean.setTargetName(util.getJavaName(name.substring(name.indexOf("_") + 1, name.length())));
bean.setTargetNameSuffix("Fields");
bean.setTargetFileSuffix(".java");
util.createJava(bean, util.getFieldCode(bean, name, getConnection()));
}
}
}
/**
* 创建字段类
*
* @throws Exception
*/
public static void createFieldJava() throws Exception {
JavaCodeBean bean = new JavaCodeBean();
bean.setTargetPackageName(builderBean.getTargetMainPackageName()+".field");
bean.setTargetName(util.getJavaName(builderBean.getMyName()));
bean.setTargetNameSuffix("Fields");
bean.setTargetFileSuffix(".java");
util.createJava(bean, util.getFieldCode(bean, builderBean.getTableName(), getConnection()));
}
/**
* 转换代码
*
* @param code
* @return String
*/
public static String replace(String code) {
code = code.replace(builderBean.getTemplateMainPackageName()+".cache", builderBean.getTargetMainPackageName()+".cache.business")
.replace(builderBean.getTemplateMainPackageName()+".fields", builderBean.getTargetMainPackageName()+".field")
.replace(builderBean.getTemplateMainPackageName()+".bean", builderBean.getTargetMainPackageName()+".bean")
.replace(builderBean.getTemplateMainPackageName()+".dao", builderBean.getTargetMainPackageName()+".dao")
.replace(builderBean.getTemplateMainPackageName()+".service", builderBean.getTargetMainPackageName()+".service")
.replace(builderBean.getTemplateMainPackageName()+".web", builderBean.getTargetMainPackageName()+".web")
.replace("作者_", builderBean.getAuthor()).replace("MyName_", util.getJavaName(builderBean.getMyName()))
.replace("myName_", util.getPropertyName(builderBean.getMyName()))
.replace("idName_", util.getPropertyName(builderBean.getIdName().toLowerCase()));
return code;
}
/**
* 创建Bean类
*
* @throws Exception
*/
public static void createBeanJava() throws Exception {
JavaCodeBean bean = new JavaCodeBean();
bean.setTemplatePackageName(builderBean.getTemplateMainPackageName()+".bean");
bean.setTemplateName("MyName_Bean");
bean.setTemplateFileSuffix(".java");
bean.setTargetPackageName(builderBean.getTargetMainPackageName()+".bean");
bean.setTargetName(util.getJavaName(builderBean.getMyName()));
bean.setTargetNameSuffix("Bean");
bean.setTargetFileSuffix(".java");
String code = util.getCode(bean);
code = replace(code);
String fieldsCode = util.getBeanFieldsCode(builderBean.getTableName(), getConnection());
code = code.replace("//TODO", fieldsCode);
util.createJava(bean, code);
}
/**
* 创建IDao类
*
* @throws Exception
*/
public static void createIDaoJava() throws Exception {
JavaCodeBean bean = new JavaCodeBean();
bean.setTemplatePackageName(builderBean.getTemplateMainPackageName()+".dao");
bean.setTemplateName("MyName_Dao");
bean.setTemplateFileSuffix(".java");
bean.setTargetPackageName(builderBean.getTargetMainPackageName()+".dao");
bean.setTargetName(util.getJavaName(builderBean.getMyName()));
bean.setTargetNameSuffix("Dao");
bean.setTargetFileSuffix(".java");
String code = util.getCode(bean);
code = replace(code);
util.createJava(bean, code);
}
/**
* 创建IService类
*
* @throws Exception
*/
public static void createIServiceJava() throws Exception {
JavaCodeBean bean = new JavaCodeBean();
bean.setTemplatePackageName(builderBean.getTemplateMainPackageName()+".service");
bean.setTemplateName("MyName_Service");
bean.setTemplateFileSuffix(".java");
bean.setTargetPackageName(builderBean.getTargetMainPackageName()+".service");
bean.setTargetName(util.getJavaName(builderBean.getMyName()));
bean.setTargetNameSuffix("Service");
bean.setTargetFileSuffix(".java");
String code = util.getCode(bean);
code = replace(code);
util.createJava(bean, code);
}
/**
* 创建ServiceImpl类
*
* @throws Exception
*/
public static void createServiceImplJava() throws Exception {
JavaCodeBean bean = new JavaCodeBean();
bean.setTemplatePackageName(builderBean.getTemplateMainPackageName()+".service.impl");
bean.setTemplateName("MyName_ServiceImpl");
bean.setTemplateFileSuffix(".java");
bean.setTargetPackageName(builderBean.getTargetMainPackageName()+".service.impl");
bean.setTargetName(util.getJavaName(builderBean.getMyName()));
bean.setTargetNameSuffix("ServiceImpl");
bean.setTargetFileSuffix(".java");
String code = util.getCode(bean);
code = replace(code);
util.createJava(bean, code);
}
/**
* 创建Action类
*
* @throws Exception
public static void createActionJava() throws Exception {
JavaCodeBean bean = new JavaCodeBean();
bean.setTemplatePackageName(builderBean.getTemplateMainPackageName()+".web");
bean.setTemplateFileSuffix(".java");
bean.setTargetPackageName(builderBean.getTargetMainPackageName()+".web");
bean.setTargetName(util.getJavaName(builderBean.getMyName()));
bean.setTargetNameSuffix("Action");
bean.setTargetFileSuffix(".java");
String code = util.getCode(bean);
code = replace(code);
util.createJava(bean, code);
}
*/
}