Java Web开发时快速生成模版代码
01 November 2017
环境: Spring MVC + Mybatis
在Java Web开发中,需要编写大量重复的代码,虽然不可缺少但是一一编写费事且无聊,是对生命的极其浪费啊,怎么能忍!
- 使用MyBatis Generator生成基础的单表DAO文件。
- 做一次只有操作单表的Controller,Service的提交
- 通过Git提取Patch,文本替换来生成新的Patch文件, 最后合并到代码分支。
还有个更好的方法就是修改Generator的源代码,根据需求把项目的相关代码一并生成。这里我们介绍第一种方法,因为简单快速!
1. 生成DAO
- 从Github克隆代码
https://github.com/mybatis/generator.git
- 编译mybatis-generator-core:
mvn jar:jar
- 运行
java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml -overwrite
generatorConfig.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<classPathEntry
location="${MySQL驱动jar包路径}"/>
<context id="${id}" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressAllComments" value="true"/>
<property name="suppressDate" value="true"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="${数据库路径}"
userId="${用户名}"
password="${密码}">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<javaModelGenerator targetPackage="${Bean的包名}" targetProject="src">
<property name="enableSubPackages" value="false"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<sqlMapGenerator targetPackage="${生成Mapper的xml文件的包名}" targetProject="src">
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER" targetPackage="${Mapper类的包名}" targetProject="src">
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<table tableName="${表名}" domainObjectName="${Bean的名字}" />
</context>
</generatorConfiguration>
2. 单表操作的提交
- 创建Controller,Service
- 提交代码
- 生成patch:
git format-patch HEAD^
3. 生成操作相关表的patch文件
执行以下代码:
package test;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class GenerateCode {
private static final String PATCH_PATH = ${PATCH_PATH};
private static final String PATCH_BASE_PATH = {PATCH_BASE_PATH};
public static void main(String[] args) {
// NOTICE: 定义新的内容
List<String[]> allKeys = new ArrayList<>();
allKeys.add(new String[]{"表前缀", "表名", "文字描述"});
try {
GenerateCode generateCode = new GenerateCode();
generateCode.setAllKeys(allKeys);
generateCode.generatePatch();
} catch (IOException e) {
e.printStackTrace();
}
}
private BufferedReader reader;
private List<String[]> allKeys;
public GenerateCode() throws FileNotFoundException {
this.reader = getBufferedReader();
}
public void generatePatch() throws IOException {
File file = new File(PATCH_BASE_PATH);
file.mkdirs();
for (String[] keys: allKeys){
reader = getBufferedReader();
replacePatch(keys);
}
}
private void replacePatch(String[] keys) throws IOException {
StringBuilder newStrs = new StringBuilder();
String lineStr = null;
while ((lineStr = reader.readLine()) != null) {
newStrs.append(replaceStr(lineStr, keys)).append("\n");
}
writePatch(newStrs.toString(), keys[1]);
}
private void writePatch(String string, String fileName) throws FileNotFoundException {
FileOutputStream outputStream = new FileOutputStream(new File(PATCH_BASE_PATH + File.separator + fileName + ".patch"));
PrintStream ps = new PrintStream(outputStream);
ps.append(string);
ps.close();
}
private BufferedReader getBufferedReader() throws FileNotFoundException {
FileReader fileReader = new FileReader(new File(PATCH_PATH));
return new BufferedReader(fileReader);
}
private String replaceStr(String originStr, String[] keys) {
// NOTICE: 在此处定义要替换的内容,视具体情况而定
return originStr.replace("表前缀", keys[0])
.replace("表名", keys[1])
.replace("创建的Java Bean的变量名", keys[1].toLowerCase())
.replace("文字描述", keys[2]);
}
public List<String[]> getAllKeys() {
return allKeys;
}
public void setAllKeys(List<String[]> allKeys) {
this.allKeys = allKeys;
}
}
4. 合并patch到代码分支
执行git am patch/*.patch
5. 修改产生的错误
只要以上几步即可生成基础模版代码,是不是很方便快捷啊!