适用于任何使用java连接关系型数据库的项目,不论是mybatis,ibatis,hibernate或是jpa,mybatis-puls等,不论前端后端,每个项目组都可以自定义模板快速生成代码,节约编写基础增删改查的时间。
修改src/test/resources/codeGenerator/config.xml中的jdbc信息
运行代码生成器src/test/java/com/fline/generator/GeneratorTest.java
Map<String, Object> map = new HashMap<>();
// map.put("excludeFields", Arrays.asList("id", "name"));
Generator.generate("codeGenerator/config.xml", map);
第一个参数是xml配置文件名,第二个参数为一个Map,在freemarker中此Map名为customItem,如果需要map中的value,则需要在freemarker中使用${customItem.key}
来获取,可以用于忽略某些字段等需求
<?xml version="1.0" encoding="UTF-8"?>
<!-- dtd验证文件 -->
<!DOCTYPE generator SYSTEM "codeGenerator.dtd" >
<generator>
<jdbcInfo>
<!-- 数据库驱动类 -->
<driver>com.mysql.jdbc.Driver</driver>
<!-- 数据库地址 -->
<url>jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&characterEncoding=UTF8&useSSL=false</url>
<!-- 数据库用户名 -->
<username>root</username>
<!-- 数据库密码 -->
<password>123456</password>
<!-- 数据库scheme -->
<scheme>saizhi</scheme>
<!-- 数据库catalog -->
<catalog></catalog>
<!-- 数据库表名 -->
<table>big_match</table>
<!-- 表对应的实体类 -->
<entity>BigMatch</entity>
<!-- 属性名是否根据字段转换成驼峰命名法,为true时subject_id将转换为subjectId作为属性(fieldName) -->
<camel>true</camel>
<!-- 模块名 -->
<module></module>
</jdbcInfo>
<typeConvertList>
<!-- 指定jdbc转换为java类型的对应关系 -->
<typeConvert java="String" jdbc="VARCHAR"/>
<typeConvert java="String" jdbc="CHAR"/>
<typeConvert java="String" jdbc="TEXT"/>
<typeConvert java="Integer" jdbc="INT"/>
</typeConvertList>
<templateList>
<!-- 模板参数,可指定多个,id指定了该templateItem的唯一标识,变量${entity}、${table}将被替换为jdbcInfo节点中的entity、table -->
<templateItem id="mysql_template">
<!-- freemarker模板文件路径 -->
<templateFile>codeGenerator/entity_template.xml</templateFile>
<!-- 文件的生成项目 -->
<targetProject>src.main.java</targetProject>
<!-- 文件的生成路径 -->
<targetPackage>com.fline.entity</targetPackage>
<!-- 生成的文件名 -->
<targetFileName>${entity}.java</targetFileName>
</templateItem>
<templateItem>
<templateFile>codeGenerator/service_template.java</templateFile>
<targetProject>src.main.java</targetProject>
<targetPackage>com.fline.service</targetPackage>
<targetFileName>${entity}Service.java</targetFileName>
</templateItem>
</templateList>
</generator>
例如在freemarker文件中使用${tableItem.beanName}
即可获取表名
{
"templateItem":{ //对应xml配置文件中的templateList
"dao_template": { //配置文件中的id
"id": "entity_template", //配置文件中的id
"targetPackage": "com.fline.entity", //配置文件中的targetPackage,生成的文件包名,没有该路径将自动生成
"templateFile": "codeGenerator/entity_template.java", //配置文件中的templateFile,freemarker模板文件名
"targetFileName": "BigMatch.java", //配置文件中的templateFile,生成的文件名
"targetProject": "src.main.java" //配置文件中的targetProject
},
"service_template": {
"id": "service_template",
"targetPackage": "com.fline.service",
"templateFile": "codeGenerator/service_template.java",
"targetFileName": "BigMatchService.java",
"targetProject": "src.main.java"
}
},
"tableItem":{
"beanName": "BigMatch", //类名
"tableName": "big_match", //表名
"remark": "",
"alias": "bigMatch", //别名
"columnList": [{ //列的属性列表
"columnName": "id", //数据库列名
"fieldName": "id", //字段名
"jdbcType": "INT", //jdbc类型
"javaType": "Integer", //java类型
"remarks": "主键", //注释
"id": true, //是否为主键
"datasize": 10, //列的大小
"digits": 0, //小数部分的位数
"nullable": true, //是否可为空
"defaultValue": "", //默认值
"autoincrement": true //是否自增
}, {
"columnName": "name",
"fieldName": "name",
"jdbcType": "VARCHAR",
"javaType": "String",
"remarks": "名称",
"id": false,
"datasize": 10,
"digits": 0,
"nullable": true,
"defaultValue": "",
"autoincrement": false
}]
}
}
Map<String, Object> map = new HashMap<>();
// 排除id和name字段
map.put("excludeFields", Arrays.asList("id", "name"));
Generator.generate("codeGenerator/config.xml", map);
以下为一份模板样例entity_template.java
package ${templateItem.entity_template.targetPackage};
import java.io.Serializable;
<#list tableItem.columnList as pk>
<#if pk.javaType=='Date'><#assign utildate=true></#if>
<#if pk.javaType=='BigDecimal'><#assign bigdecimal=true></#if>
</#list>
<#if utildate??>import java.util.Date;</#if>
<#if bigdecimal??>import java.math.BigDecimal;</#if>
import lombok.Data;
@Data
public class ${tableItem.beanName} implements Serializable {
private static final long serialVersionUID = 1L;
<#-- field -->
<#list tableItem.columnList as pk>
<#assign exist=false>
<#-- 忽略字段 -->
<#if customItem?? && customItem.excludeFields??>
<#list customItem.excludeFields as fi>
<#if fi == pk.fieldName>
<#assign exist=true><#break>
</#if>
</#list>
</#if>
<#if !exist>
/**
* ${pk.remarks}
*/
private ${pk.javaType} ${pk.fieldName};
</#if>
</#list>
}
生成的文件BigMatch.java
package com.fline.entity;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
@Data
public class BigMatch implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 注释
*/
private Integer areaId;
/**
* 注释
*/
private String areaName;
/**
* 注释
*/
private Integer subject_Id;
/**
* 注释
*/
private String subjectName;
/**
* 注释
*/
private String banner;
/**
* 注释
*/
private Date starttime;
/**
* 注释
*/
private Date endtime;
/**
* 注释
*/
private String memo;
}