Releases: GreedyStar/generator
Generator Release 1.4.1
BUG修复
修复配置DO实体类别名时,生成的代码文件名错误的问题
Generator Release 1.4.0
新特性
1. 单表模式支持JPA和Mybatis-Plus
工具默认采用Mybatis模式生成DAO和Mapper.xml,1.4.0中引入了对JPA和Mybatis-Plus的单表代码生成支持。
配置项如下:
mybatis-plus-enable: true
jpa-enable: true
或
mybatisPlusEnable: true
jpaEnable: true
需要注意,JPA和Mybatis-Plus不可同时启用,切上述两个配置均未配置时,则采用默认的MyBatis模式。
2. 支持Lombok和Swagger
配置项如下:
swagger-enable: true
lombok-enable: true
或
swaggerEnable: true
lombokEnable: true
需要注意,当启用swagger时,我们只会在Controller类中添加swagger注解。这是因为,我们不建议在实体(DO)上使用swagger注解,在DTO和VO上使用swagger更为优雅。
3. 可配置主键生成策略(数据库自增、UUID)
配置项如下:
id-strategy: AUTO
或
idStrategy: AUTO
目前支持两种主键策略:AUTO表示数据库自增,UUID表示通用唯一识别码,默认为数据库自增。
需要注意,上述的主键策略仅在JPA和Mybatis-Plus模式下有效,当使用传统Mybatis模式时,需要自行处理主键。
4. 可配置文件覆盖策略
配置项如下:
file-override: true
或
fileOverride: true
当启用文件覆盖策略时,工具在生成代码时会自动覆盖同名文件,默认为false,请谨慎配置,以防代码丢失。
5. 可自定义类名和文件名
配置项如下:
name:
controller: $sAction
service: $sServiceImpl
interf: $sService
dao: $sDao
entity: $sDO
mapper: $sMapper
其中,$s为占位符,例如我们要生成的类名为User,则上述配置生成的类名为:UserAction、UserServiceImpl、UserService、UserDao、UserDO和UserMapper。
特别注意,在使用JPA或Mybatis-Plus模式时,dao类的后缀默认分别为Repository和Mapper,例如UserRepository和UserMapper。
6. 支持将MyBatis映射文件放于source目录下
在默认的Mybatis模式下,下述配置:
path:
mapper: mybatis
path.mapper 是相对resources目录而言的,也就是mapper.xml放置在项目路径的resources/mybatis/目录下。
在1.4.0中,我们提供了如下配置项:
mapper-under-source: true
当上述配置为true时,path.mapper则是相对源文件目录而言的,也就表示mapper.xml文件将和Controller、Service等类存在于同一基础包路径下。
7. 调整代码生成策略(支持单表、一对多、多对一、多对多)
在1.4.0之前的版本中,我们提供了单表、一对多、多对多三种代码生成模式,但在表述中存在一定问题,1.4.0对这个问题进行了修复,自1.4.0版本开始,工具支持单表模式、一对多模式、多对一模式、多对多模式,下面举个栗子:
数据库有四个关系模式,分别为 user、office、article、role,我们将user作为要生成代码的业务表,则可以得到如下关系:
- user为单表关系
- 多个user组成一个office,则user与office为多对一关系
- 一个user发表多个article,则user与article为一对多关系
- 一个user拥有多个role,一个role被多个user拥有,则user与role为多对多关系
8. 添加通过编程进行配置的方式
自1.4.0版本起,我们开始支持通过编程对工具进行配置的方式,代码如下:
// 创建自定义配置对象
Configuration configuration = new Configuration();
// 基础配置
configuration.setAuthor("GreedyStar");
configuration.setPackageName("com.greedystar.mybatisplusdemo");
configuration.setConvertor("com.greedystar.mybatisplusdemo.convertor.CustomConvertor");
configuration.setLombokEnable(true);
configuration.setSwaggerEnable(true);
configuration.setFileOverride(true);
configuration.setMybatisPlusEnable(true);
configuration.setIdStrategy(IdStrategy.UUID);
// 数据库连接配置(db)
Configuration.Db dbConfig = new Configuration.Db();
dbConfig.setUrl("jdbc:mysql://localhost:3306/generator-demo?useUnicode=true&useSSL=false&characterEncoding=UTF-8");
dbConfig.setUsername("root");
dbConfig.setPassword("");
configuration.setDb(dbConfig);
// 代码生成路径配置(path)
Configuration.Path pathConfig = new Configuration.Path();
pathConfig.setController("controller");
pathConfig.setService("service.impl");
pathConfig.setInterf("service");
pathConfig.setDao("mapper");
pathConfig.setEntity("entity");
pathConfig.setMapper("mappers");
configuration.setPath(pathConfig);
// 类别名配置(name)
Configuration.Name nameConfig = new Configuration.Name();
nameConfig.setDao("$sMapper");
configuration.setName(nameConfig);
// 为工具添加配置
ConfigUtil.setConfiguration(configuration);
注意:编程方式配置比配置文件具有更高的优先级。
上面代码中的配置等价于如下配置文件:
db:
url: jdbc:mysql://localhost:3306/generator-demo?useUnicode=true&useSSL=false&characterEncoding=UTF-8
username: root
password:
author: GreedyStar
package-name: com.greedystar.mybatisplusdemo
convertor: com.greedystar.mybatisplusdemo
swagger-enable: true
lombok-enable: true
mybatis-plus-enable: true
id-strategy: UUID
path:
controller: controller
service: service.impl
interf: service
dao: mapper
entity: entity
mapper: mappers
name:
dao: $sMapper
Generator Release 1.3.0
新特性
添加实体的类注释和属性注释
在数据库中设置表和列的注释后,Generator会在生成Entity代码时自动包含这些注释,例如:
/**
* 用户表
* Author GreedyStar
* Date 2020-05-21
*/
public class User implements Serializable {
/**
* 姓名
*/
private String name;
......
}
支持自定义类型转换器
自1.3.0版本起,开始支持自定义类型转换器,用于将JDBC类型转换为Java类型,使用步骤如下:
- 实现 com.greedystar.generator.utils.convertor.TypeConvertor 接口,接口代码如下:
public interface TypeConvertor {
/**
* 将JDBC类型转换为Java类型
*
* @param type JDBC类型名
* @return Java类型名
*/
String convertType(JDBCType type);
}
- 在generator.yaml中配置类型转换器,以下示例省略了部分配置:
......
packageName: com.greedystar.demo
convertor: com.greedystar.demo.test.CustomConvertor
注意:类型转换器要以类的全限定名进行配置
用户也可以不配置类型转换器,Generator将使用默认的DefaultConvertor,默认转换器代码如下:
public class DefaultConvertor implements TypeConvertor {
/**
* 将JDBC类型转换为Java类型
*
* @param type JDBC类型名
*/
@Override
public String convertType(JDBCType type) {
StringBuilder sb = new StringBuilder();
switch (type) {
case BIT:
case BOOLEAN:
sb.append("boolean");
break;
case TINYINT:
sb.append("byte");
break;
case SMALLINT:
sb.append("short");
break;
case INTEGER:
sb.append("int");
break;
case BIGINT:
sb.append("long");
break;
case REAL:
sb.append("float");
break;
case FLOAT:
case DOUBLE:
sb.append("double");
break;
case DECIMAL:
case NUMERIC:
sb.append("BigDecimal");
break;
case VARCHAR:
case CHAR:
case NCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONGNVARCHAR:
sb.append("String");
break;
case DATE:
sb.append("Date");
break;
case TIME:
sb.append("Time");
break;
case TIMESTAMP:
sb.append("Timestamp");
break;
case CLOB:
case NCLOB:
case BLOB:
case BINARY:
case VARBINARY:
case LONGVARBINARY:
sb.append("byte[]");
break;
case NULL:
case OTHER:
case JAVA_OBJECT:
sb.append("Object");
break;
default:
sb.append("Object");
}
return sb.toString();
}
}
自动创建代码生成目录
当用户配置的代码生成路径不存在时,Generator会自动创建相应的目录并生成源文件。
解决生成文件冲突
当已存在与待生成文件同名的文件时,Generator会给出提示,并将新生成的文件以.generated结尾,不会对已存在文件进行覆盖。
Generator Release 1.2.1
新特性
Service层添加接口和实现类的支持
配置文件 generator.yaml 中,path 节点下新增 interf 属性,示例如下:
path:
interf: service
service: service.impl
...
上述配置会生成接口文件 XXService.java 和实现类文件 XXServiceImpl.java。
当不配置 interf 属性或 interf 属性为null时,表示不生成接口文件。
Generator Release 1.2.0
新特性
1. 添加 数据表列名 到 实体属性名 映射规则
规则部分参考自《阿里巴巴Java开发手册》建表规约章节,如下:
列名 | 属性名 |
---|---|
createTime | createTime |
CREATETIME | createtime |
CREATE_TIME | createTime |
create_time | createTime |
2. 可配置生成策略
配置文件 generator.yaml 中,path 节点下的字段可以为空,如:
path:
controller:
service: service
dao: dao
entity: entity
mapper: mybatis
上述配置仅会生成Service、Dao、Entity、Mapper代码,不会生成Controller代码,但请注意各层代码之间的引用关系。
3. 代码生成路径扩展
配置文件 generator.yaml 中,path 节点下的字段支持多级路径,如:
path:
controller: controller
service: service.impl
dao: dao
entity: entity
mapper: mybatis.mapper
上述配置中,service和mapper配置了多级路径,生成代码路径如下:
src/main/java 目录:
service/impl/XXXService.java
controller/XXXController.java
dao/XXXDao.java
entity/XXX.java
src/main/resources 目录:
mybatis/mapper/XXXMapper.xml
4. 代码模板修改
删除了 Mapper_M2M.ftl 模板文件,后续版本中单表、一对多、多对多关系均使用 Mapper.ftl 模板文件。
对代码模板内容进行了一定修改,添加了 查询单条记录的get方法 和 批量插入的insertBatch方法 。
5. 多线程处理代码生成任务
通过多线程管理代码生成任务,不会再出现某一任务出错导致后续任务丢失的情况。
Generator Release 1.1.0
新特性:扩展数据库连接方式
- 配置文件中新增如下字段:
db:
url: jdbc:mysql://localhost:3306/generator-demo
username: root
password: 123
- 支持连接本地或远程MySql、Oracle、SqlServer数据库,示例如下:
mysql:
db:
url: jdbc:mysql://localhost:3306/generator-demo
username: root
password: 123
oracle:
db:
url: jdbc:oracle:thin:@localhost:1521:orcl
username: system
password: pswd123
sqlserver:
db:
url: jdbc:sqlserver://localhost:1433;databaseName=generator_demo
username: sa
password: pswd123
自1.1.0版本起,框架中移除了JDBC驱动的依赖,请用户自行在项目中添加所需的JDBC驱动依赖。
Generator Release 1.0.1
BUG修复
修复默认代码模板文件中未替换的固定字段。
Generator Release 1.0.0
v1.0.0 提供了工具的基本功能:
- 连接本地MySql数据库
- 可根据数据库单表、一对多、多对多关系,生成相应包含简单的CRUD操作的Mapper文件
- 生成Controller、Service、Dao代码