Skip to content

Releases: GreedyStar/generator

Generator Release 1.4.1

13 Nov 09:39
Compare
Choose a tag to compare

BUG修复

修复配置DO实体类别名时,生成的代码文件名错误的问题

Generator Release 1.4.0

14 Dec 14:36
Compare
Choose a tag to compare

新特性

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类的后缀默认分别为RepositoryMapper,例如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版本开始,工具支持单表模式、一对多模式、多对一模式、多对多模式,下面举个栗子:

数据库有四个关系模式,分别为 userofficearticlerole,我们将user作为要生成代码的业务表,则可以得到如下关系:

  • user单表关系
  • 多个user组成一个office,则useroffice多对一关系
  • 一个user发表多个article,则userarticle一对多关系
  • 一个user拥有多个role,一个role被多个user拥有,则userrole多对多关系

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

09 Jun 01:13
Compare
Choose a tag to compare

新特性

添加实体的类注释和属性注释

在数据库中设置表和列的注释后,Generator会在生成Entity代码时自动包含这些注释,例如:

/**
 * 用户表
 * Author GreedyStar
 * Date  2020-05-21
 */
public class User implements Serializable {
    /**
     * 姓名
     */
    private String name;
    ......
}

支持自定义类型转换器

自1.3.0版本起,开始支持自定义类型转换器,用于将JDBC类型转换为Java类型,使用步骤如下:

  1. 实现 com.greedystar.generator.utils.convertor.TypeConvertor 接口,接口代码如下:
public interface TypeConvertor {

    /**
     * 将JDBC类型转换为Java类型
     *
     * @param type JDBC类型名
     * @return Java类型名
     */
    String convertType(JDBCType type);

}
  1. 在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

28 Jan 16:21
Compare
Choose a tag to compare

新特性

Service层添加接口和实现类的支持

配置文件 generator.yaml 中,path 节点下新增 interf 属性,示例如下:

path:
  interf: service
  service: service.impl
  ...

上述配置会生成接口文件 XXService.java 和实现类文件 XXServiceImpl.java。

当不配置 interf 属性或 interf 属性为null时,表示不生成接口文件。

Generator Release 1.2.0

07 Dec 14:28
Compare
Choose a tag to compare

新特性

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

06 Dec 02:17
Compare
Choose a tag to compare

新特性:扩展数据库连接方式

  1. 配置文件中新增如下字段:
db:
  url: jdbc:mysql://localhost:3306/generator-demo
  username: root
  password: 123
  1. 支持连接本地或远程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

06 Dec 02:08
Compare
Choose a tag to compare

BUG修复

修复默认代码模板文件中未替换的固定字段。

Generator Release 1.0.0

06 Dec 02:07
Compare
Choose a tag to compare

v1.0.0 提供了工具的基本功能:

  1. 连接本地MySql数据库
  2. 可根据数据库单表、一对多、多对多关系,生成相应包含简单的CRUD操作的Mapper文件
  3. 生成Controller、Service、Dao代码