`
- `hasSqlDate` 是否存在`java.sql.Date`类型,`true`:存在,`false`:不存在,数据类型:`java.lang.Boolean`
- `hasTimeStamp` 是否存在`java.sql.TimeStamp`类型,`true`:存在,`false`:不存在,数据类型:`java.lang.Boolean`
- `hasBigDecimal` 是否存在`java.math.BigDecimal`类型,`true`:存在,`false`:不存在,数据类型:`java.lang.Boolean`
##### 使用方式
> `freemarker模板`:`${table.xxx}`,如表名的使用为`${table.tableName}`
#### Column参数
- `columnName` `列名`,如:`user_id`,数据类型:`java.lang.String`
- `primaryKey` `是否为主键`,数据类型:`java.lang.Boolean`,`true`:主键,`false`:非主键
- `foreignKey` `是否为外键`,数据类型:`java.lang.Boolean`,`true`:外键,`false`:非外键
- `size` `列长度`,数据类型:`java.lang.Integer`
- `decimalDigits` `小数点精度`,数据类型:`java.lang.Integer`
- `nullable` `列是否为空`,数据类型:`java.lang.Boolean`,`true`:为空,`false`:非空
- `autoincrement` `是否自增`,数据类型:`java.lang.Boolean`,`true`:自增列,`false`:普通列
- `defaultValue` `默认值`,数据类型:`java.lang.String`
- `remark` `列备注`,数据类型:`java.lang.String`
- `jdbcType` `JDBC类型`,对应`java.sql.Types`内类型,数据类型:`java.lang.Integer`
- `jdbcTypeName` `JDBC类型名称`,数据类型:`java.lang.String`
- `javaProperty` `格式化后的属性名称`,如:`userId`,数据类型:`java.lang.String`
- `javaType` `Java数据类型短名`,如:`TimeStamp`,数据类型:`java.lang.String`
- `fullJavaType` `Java数据类型全名`,如:`java.sql.TimeStamp`,数据类型:`java.lang.String`
##### 使用方式
> `freemarker模板`:`${column.xxx}`,如列名的使用为`${column.columnName}`
#### 基础参数
- `className`:Class名称,freemarker指定模板生成文件的类名,模板内配置`${className}`使用
- `packageName`:Package名称,freemarker指定模板生成文件的包名,模板内配置`${packageName}`使用
### 怎么自定义模板?
下面提供一个简单的模板示例,根据上面的`内置参数`可以任意自定义生成文件的内容。
```
<#if (packageName)??>
package ${packageName};
#if>
import lombok.Data;
<#if (table.hasSqlDate)>
import java.sql.Date;
#if>
<#if (table.hasTimeStamp)>
import java.sql.Timestamp;
#if>
<#if (table.hasBigDecimal)>
import java.math.BigDecimal;
#if>
/**
* 本类代码由code-builder自动生成
* 表名: ${table.tableName} - ${table.remark}
* ===============================
* Created with code-builder.
* User:恒宇少年
* Date:${.now}
* 简书:http://www.jianshu.com/u/092df3f77bca
* 码云:https://gitee.com/hengboy
* ================================
*/
@Data
public class ${className} {
<#list table.primaryKeys as key>
/**
* ${key.columnName} - ${key.remark}
*/
private ${key.javaType} ${key.javaProperty};
#list>
<#list table.columns as column>
<#if (!column.primaryKey)>
/**
* ${column.columnName} - ${column.remark}
*/
private ${column.javaType} ${column.javaProperty};
#if>
#list>
}
```
上面是一个数据实体的`freemarker`模板内容,把这个模板存放到`freemarker`目录下,对应在`templates`标签内添加配置就可以完成数据实体的自动创建,创建后的数据实体内容如下所示:
```
package com.code.builder.sample.model;
import lombok.Data;
import java.sql.Timestamp;
/**
* 本类代码由code-builder自动生成
* 表名: app_balance_type - 余额类型信息表
* ===============================
* Created with code-builder.
* User:恒宇少年
* Date:Jul 17, 2018 9:09:13 PM
* 简书:http://www.jianshu.com/u/092df3f77bca
* 码云:https://gitee.com/hengboy
* ================================
*/
@Data
public class BalanceTypeEntity {
/**
* BT_ID - 余额类型主键
*/
private String btId;
/**
* BT_NAME - 余额类型名称
*/
private String btName;
/**
* BT_FLAG - 余额类型标识
*/
private String btFlag;
/**
* BT_CREATE_TIME - 添加时间
*/
private Timestamp btCreateTime;
/**
* BT_MARK - 余额类型备注信息
*/
private String btMark;
}
```
### 创建的实体类去了哪里?
创建的实体类会在`target/generated-sources/java`目录下,如果你配置`packagePrefix`参数,会自动在生成目录下创建`packagePrefix`配置值的子目录。
如:
```
com.code.builder.sample
```
则最终创建的生成根目录为:`target/generated-sources/java/com/code/builder/sample`
### 怎么使用?
#### SpringBoot 方式使用
1. `运行项目`就可以根据配置生成对应的文件
#### Maven Plugin 方式使用
1. 执行`mvn clean`命令用于清空`target`目录下的内容
2. 执行`mvn compile`命令编译项目并且生成`实体类`
### 为什么SpringBoot方式不用配置数据库信息?
`Maven Plugin`方式是通过配置的`数据库连接信息`以及数据库连接驱动获取数据库连接对象`Connection`后来操作`JDBC元数据`。
而`SpringBoot`方式则是直接使用项目中配置的`DataSource`对象实例来进行获取的`Connection`数据库连接对象后来操作`JDBC元数据`。
> 注意:如果你是多数据源项目,默认会使用`primary`数据源实例。