-
Notifications
You must be signed in to change notification settings - Fork 121
code generator
sika-code edited this page Jul 20, 2019
·
3 revisions
code-generator【代码生成器】
- 模板化代码生成器
- 一键生成模版化代码
- 减少重复性工作
- 提高开发效率
- 基于mybatis-plus-generator
- 基于Freemarker模板构建
<dependencies>
<dependency>
<groupId>com.lxzl.skull.systemframework</groupId>
<artifactId>code-generator</artifactId>
<version>${com.lxzl.skull.version}</version>
</dependency>
</dependencies>
@Slf4j
public class GenerateCodeConfig {
/** 路径配置 */
private static String projectPrefix = "standard-footer-demo";
private static String basePackagePathPrefixForJava = "src/main/java/com/lxzl/skull/standard/footer/demo/business";
private static String basePackagePathPrefixForXml = "src/main/resources/mapper";
private static String modulePackage = "com.lxzl.skull.standard.footer.demo";
/** 数据库配置 */
private static String tablePrefix = "risk_system_";
private static String dataBaseUrl = "192.168.10.205";
private static String dataBaseName = "lxzl_risk_system";
private static String dataBasePort = "3306";
private static String username = "lxzldev";
private static String password = "lxzldev";
// 构建生成代码的数据传输对象
public static GeneratorCodeDTO buildGeneratorCodeDTO(String tableName, String author) {
GeneratorCodeDTO generatorCodeDTO = new GeneratorCodeDTO();
/** 父包 */
generatorCodeDTO.setParentPackage(modulePackage + ".business")
.setModulePackage(modulePackage)
/** common的path */
.setPathForDataaccess(buildFullPathForJava("dataaccess"))
/** common类的path */
.setPathForCommon(buildFullPathForJava("common"))
/** service类path */
.setPathForCore(buildFullPathForJava("core"))
/** web的path */
.setPathForWeb(buildFullPathForJava("web"))
/** api的path */
.setPathForApi(buildFullPathForJava("api"))
/** xml的path */
.setPathForXml(buildFullPathForXml("dataaccess"))
.setDataBaseUrl(dataBaseUrl)
.setDataBaseName(dataBaseName)
.setDataBasePort(dataBasePort)
.setUsername(username)
.setPassword(password)
/** 表名 */
.setTableName(tableName)
/** 表前缀 */
.setSubPrefix(tablePrefix)
/** 作者 */
.setAuthor(author);
return generatorCodeDTO;
}
// 构建生成java文件的全路径
private static String buildFullPathForJava(String projectSuffix) {
StringBuilder stringBuilder = buildFullPathCore(projectSuffix, basePackagePathPrefixForJava);
log.info(projectSuffix + "的全路径为:" + stringBuilder);
return stringBuilder.toString();
}
// 构建生成xml文件的全路径
private static String buildFullPathForXml(String projectSuffix) {
StringBuilder stringBuilder = buildFullPathCore(projectSuffix, basePackagePathPrefixForXml);
log.info(projectSuffix + "的全路径为:" + stringBuilder);
return stringBuilder.toString();
}
// 构建全路径的核心方法
protected static StringBuilder buildFullPathCore(String projectSuffix, String basePackagePathPrefix) {
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("/")
.append(projectPrefix)
.append("-")
.append(projectSuffix)
.append("/")
.append(basePackagePathPrefix);
return stringBuilder;
}
/**
* 代码生成器启动类
*
* @author daiqi
* @create 2019-07-11 22:32
*/
public class GenerateCodeApplication {
private static String tableName = "risk_system_access_rule_type";
private static String author = "zhangsan";
public static void main(String[] args) {
GeneratorCodeDTO generatorCodeDTO = GenerateCodeConfig.buildGeneratorCodeDTO(tableName, author);
new GenerateCodeHandler().generateCode(generatorCodeDTO);
}
}
1 src/main/resources下新建templates目录
2 新建dto.java.ftl文件,并复写规则
1 创建GenerateCodeHandlerCustomer并继承GenerateCodeHandler,重写相关方法
import com.lxzl.skull.GenerateCodeHandler;
/**
* @author daiqi
* @create 2019-07-12 9:32
*/
public class GenerateCodeHandlerCustomer extends GenerateCodeHandler {
/** -----------------------以下方式2选1---------------------- */
/**
* 方式一:重写生成方法,移除不需要生成类的方法
*/
@Override
protected void generateToCommon() {
// 移除不需要的类
// generateDTO();
generateQuery();
generateConstant();
generateErrorCodeEnum();
}
/**
* 方式二:将不需要生成的类变为空实现
*/
@Override
public void generateDTO() {
}
}
2 使用GenerateCodeHandlerCustomer的对象调用generateCode
public static void main(String[] args) {
GeneratorCodeDTO generatorCodeDTO = GenerateCodeConfig.buildGeneratorCodeDTO(tableName, author);
new GenerateCodeHandlerCustomer().generateCode(generatorCodeDTO);
}
1 新建模板类【src/main/resources/templates/api.java.ftl】
2 创建GenerateCodeHandlerCustomer并继承GenerateCodeHandler,重写相关方法
/**
* @author daiqi
* @create 2019-07-12 9:32
*/
public class GenerateCodeHandlerCustomer extends GenerateCodeHandler {
@Override
protected void generateToWeb() {
super.generateToWeb();
generateApi();
}
protected void generateApi() {
String templatePath = "/templates/api_customer.java.ftl";
String filePath = pathForApi + "/" + moduleName + "/api/";
String classBodySuffix = "Api";
String packageKey = "Api";
String subPackage = "api";
generateCodeCoreForCustomer(templatePath, filePath, classBodySuffix, packageKey, subPackage);
}
}
3 使用GenerateCodeHandlerCustomer的对象调用generateCode
public static void main(String[] args) {
GeneratorCodeDTO generatorCodeDTO = GenerateCodeConfig.buildGeneratorCodeDTO(tableName, author);
new GenerateCodeHandlerCustomer().generateCode(generatorCodeDTO);
}
- 检查代码生成器启动类的Configurations中的Working directory是否为项目目录