欢迎使用代码生成器Code-Builder

更新记录

Maven Center 版本

Maven central

欢迎关注公众号

微信公众号 关注微信公众号,回复加群,获取交流群群号。

背景

本来code-builder是专门为MyBatis Enhance来编写的一块代码生成器

code-builder可以用来做什么?

code-builder是一款代码生成maven mojo插件,通过简单的配置就可以完成数据库内Table转换Entity或者其他实体类,想怎么生成完全根据你的个人业务逻辑,code-builder尽可能的完善的提供数据库内的一些定义的信息,让你更方便更灵活的来生成Java文件。

使用环境

实现方式

是怎么获取到的数据库信息?

code-builder内部采用了java.sql.ConnectionMetaData元数据的方式来获取数据库内TableColumn等信息,MetaData是不局限于任何的数据库类型的,所以code-builder在基础设计上是可以在任何数据库类型中来完成它的生成任务的,不过初版本仅支持了MySQLMariaDB这两种数据库类型,在code-builder后期更新版本中会把主流的数据库进行添加。

生成模板选型

目前code-builder内部采用了freemarker模板来完成实体类的自动生成,模板由使用者来自定义编写,内部预留了使用其他模板的方式,如果你需要使用别的模板,如:Velocity,对应添加生成的实现业务逻辑即可。

怎么配置?

SpringBoot 方式配置

1.0.5.RELEASE版本添加了集成SpringBootstarter,依赖如下所示:

数据库类型配置

执行自动生成前需要配置数据库的相关配置信息

数据库基本信息配置 (仅maven-plugin使用)

自定义builder所需模板路径

code-builder会自动去找classes/templates/builder下的模板,如果使用默认的freemarker模板来生成,那么模板所存放的位置为classes/templates/builder/freemarker。 如果你想自定义模板的路径可以设置builderDir的地址,在这里因为考虑到了不同操作系统的分隔符不一样(Windows系统分隔符\Linux以及O SX分隔符为/)所以这里采用.分隔符配置,code-builder会自动根据操作系统来转换路径,配置如下所示:

<builderDir>classes.code.builder</builderDir>

注意:freemarker文件夹不允许修改,只能修改code-builder加载模板的根路径。

排除生成实体后的前缀

数据库设计有时需要添加前缀,如:app_sys_等,实际生成实体后前缀则是并不想展示,那么配置参数ignoreClassPrefix就可以自动排除前缀,如下所示:

<ignoreClassPrefix>App</ignoreClassPrefix>

注意:由于替换生成后的类名称所以这里要准守驼峰命名规则首字母大写,一次只能配置一个替换前缀。

使用前AppUserInfoEntity,使用后UserInfoEntity

模板配置

使用templates标签配置自定义的模板列表,一次可以使用单个或者多个模板进行生成,如下配置:

<templates>
    <template>
        <name>entity.ftl</name>
        <packageName>entity</packageName>
        <fileSuffix>entity</fileSuffix>
    </template>
    <template>
        <name>service.ftl</name>
        <packageName>service</packageName>
        <fileSuffix>Service</fileSuffix>
    </template>
    <template>
        <name>mapper.ftl</name>
        <packageName>mapper</packageName>
        <fileSuffix>Mapper</fileSuffix>
    </template>
</templates>

内置参数

模板驱动数据模型内置了部分参数,code-builder准备的每一个参数都是在生成实体类时都可能会用到的。

Table参数

使用方式

freemarker模板${table.xxx},如表名的使用为${table.tableName}

Column参数

<#if (table.hasSqlDate)> import java.sql.Date; </#if> <#if (table.hasTimeStamp)> import java.sql.Timestamp; </#if> <#if (table.hasBigDecimal)> import java.math.BigDecimal; </#if> /**

import java.sql.Timestamp; /**

为什么SpringBoot方式不用配置数据库信息?

Maven Plugin方式是通过配置的数据库连接信息以及数据库连接驱动获取数据库连接对象Connection后来操作JDBC元数据

SpringBoot方式则是直接使用项目中配置的DataSource对象实例来进行获取的Connection数据库连接对象后来操作JDBC元数据

注意:如果你是多数据源项目,默认会使用primary数据源实例。