source code怎么用_code-builder代码生成器
背景
本来code-builder是专门为MyBatis Enhance来编写的一块代码生成器
code-builder可以用来做什么?
code-builder是一款代码生成maven mojo插件,通过简单的配置就可以完成数据库内Table转换Entity或者其他实体类,想怎么生成完全根据你的个人业务逻辑,code-builder尽可能的完善的提供数据库内的一些定义的信息,让你更方便更灵活的来生成Java文件。
使用环境
- Maven构建的项目
- JDK 1.6以上版本
实现方式
是怎么获取到的数据库信息?
code-builder内部采用了java.sql.Connection的MetaData元数据的方式来获取数据库内Table、Column等信息,MetaData是不局限于任何的数据库类型的,所以code-builder在基础设计上是可以在任何数据库类型中来完成它的生成任务的,不过初版本仅支持了MySQL、MariaDB这两种数据库类型,在code-builder后期更新版本中会把主流的数据库进行添加。
生成模板选型
目前code-builder内部采用了freemarker模板来完成实体类的自动生成,模板由使用者来自定义编写,内部预留了使用其他模板的方式,如果你需要使用别的模板,如:Velocity,对应添加生成的实现业务逻辑即可。
怎么配置?
SpringBoot 方式配置
在1.0.5.RELEASE版本添加了集成SpringBoot的starter,依赖如下所示:
- 使用Maven构建工具时,复制下面的内容到pom.xml配置文件内
com.gitee.hengboy code-builder-spring-boot-starter 1.0.5.RELEASE
- 如果你是用的Gradle构建工具,那么复制下面的内容到你的build.gradle
compile group: 'com.gitee.hengboy', name: 'code-builder-spring-boot-starter', version: '1.0.5.RELEASE'
那么我们在application.yml或者application.properties配置文件内该怎么配置相关的参数呢?
hengboy: code: builder: execute: true configuration: package-prefix: com.code.builder.sample.codebuildersample templates: - name: entity.ftl packageName: model fileSuffix: Entity - name: service.ftl packageName: service fileSuffix: Service - name: controller.ftl packageName: controller fileSuffix: Controller generator-by-pattern: '%app_user_info%' db-type: mysql engine-type-enum: freemarker builder-dir: classes.templates.builder target-dir: generated-sources.java tables: - app_shop_type - app_user_exchange_good ignore-class-prefix: App
每个参数的具体介绍请往下看。
Maven Plugin 方式配置
由于code-builder是Maven mojo插件的形式创建的,所以我们只需要在项目的pom.xml文件内添加plugin插件配置,如下所示:
com.gitee.hengboy code-builder-maven-plugin 1.0.5.RELEASEgeneratormysql mysql-connector-java 5.1.46trueMySQLcom.mysql.jdbc.Driverxxxxxxxxxxxxxjdbc:mysql://xxx.xx.xx.xx:3306
app_shop_type
app_user_exchange_goodFREEMARKER%app_user_info%Appclasses.templates.buildercom.code.builder.sampleentity.ftlmodelservice.ftlserviceServicemapper.ftlmapperMapper
数据库驱动依赖添加
code-builder不局限你使用的数据库类型,所以在生成时需要使用者添加对应数据类型的依赖,如上面的配置中则是添加了MySQL数据库的依赖
.....mysql mysql-connector-java 5.1.46.....
生成的控制开关
并不是每一次的编译或者打包时都需要生成对应的实体,针对这种情况code-builder添加了execute参数来控制开启与关闭。
- true:开启自动生成
- false:关闭自动生成
数据库类型配置
执行自动生成前需要配置数据库的相关配置信息
- dbType:数据库类型,默认使用MySQL数据库类型。
- dbDriverClassName:数据库驱动类名,根据不用的数据库类型配置不同的驱动类名,默认根据dbType使用内部定义的类名,如需自定义可以设置。(仅maven-plugin使用)
数据库基本信息配置 (仅maven-plugin使用)
- dbName:数据库名称
- dbUserName:数据库用户名
- dbPassword:数据库密码
- dbUrl:数据库连接路径,连接路径不需要填写数据库名,正确示例如:jdbc:mysql://localhost:3306
生成表名符合规则的表
根据表达式来创建表,表达式与模糊查询语句表达式一般无二,配置generatorByPattern参数并设置对应的表达式就可以根据表达式来匹配出参与生成的Table列表。
- 指定前缀匹配
app_order%
示例:将会匹配出app_order_info、app_order_record等表。
- 指定后缀匹配
%order
示例:将会匹配出app_good_order、app_exchange_order等表。
- 包含匹配
%order%
示例:将会匹配出app_order_info、app_good_order等表。
生成指定表
code-builder支持指定单个或者多个表来生成,只需要配置tables参数即可,如下所示:
app_shop_type
app_user_exchange_good
上面的配置是本次生成仅操作app_shop_type、app_user_exchange_good两张表。
注意:tables参数的优先级要高于generatorByPattern参数。
自定义builder所需模板路径
code-builder会自动去找classes/templates/builder下的模板,如果使用默认的freemarker模板来生成,那么模板所存放的位置为classes/templates/builder/freemarker。 如果你想自定义模板的路径可以设置builderDir的地址,在这里因为考虑到了不同操作系统的分隔符不一样(Windows系统分隔符,Linux以及O SX分隔符为/)所以这里采用.分隔符配置,code-builder会自动根据操作系统来转换路径,配置如下所示:
classes.code.builder
注意:freemarker文件夹不允许修改,只能修改code-builder加载模板的根路径。
排除生成实体后的前缀
数据库设计有时需要添加前缀,如:app_、sys_等,实际生成实体后前缀则是并不想展示,那么配置参数ignoreClassPrefix就可以自动排除前缀,如下所示:
App
注意:由于替换生成后的类名称所以这里要准守驼峰命名规则首字母大写,一次只能配置一个替换前缀。
使用前AppUserInfoEntity,使用后UserInfoEntity。
模板配置
使用templates标签配置自定义的模板列表,一次可以使用单个或者多个模板进行生成,如下配置:
entity.ftlentityentityservice.ftlserviceServicemapper.ftlmapperMapper
- name :freemarker目录下模板的名称,必填
- packageName:生成该模板文件后的子包名称,非必填
- fileSuffix:生成文件的后缀,如:配置后缀为Entity,则添加后缀后的文件名为UserInfoEntity,后缀首字母会自动根据驼峰转换成大写
内置参数
模板驱动数据模型内置了部分参数,code-builder准备的每一个参数都是在生成实体类时都可能会用到的。
Table参数
- tableName 表名,数据类型:java.lang.String
- remark 表备注信息,数据类型:java.lang.String
- entityName 实体类名称,如:user_info转换为userInfo,数据类型:java.lang.String
- columns 列列表,数据类型:java.util.List
- primaryKeys 主键列表,数据类型:java.util.List
- 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}使用
怎么自定义模板?
下面提供一个简单的模板示例,根据上面的内置参数可以任意自定义生成文件的内容。
package ${packageName};#if>import lombok.Data;import java.sql.Date;#if>import java.sql.Timestamp;#if>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 * ================================ */@Datapublic class ${className} { /** * ${key.columnName} - ${key.remark} */ private ${key.javaType} ${key.javaProperty};#list> /** * ${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 * ================================ */@Datapublic 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 方式使用
- 运行项目就可以根据配置生成对应的文件
Maven Plugin 方式使用
- 执行mvn clean命令用于清空target目录下的内容
- 执行mvn compile命令编译项目并且生成实体类
为什么SpringBoot方式不用配置数据库信息?
Maven Plugin方式是通过配置的数据库连接信息以及数据库连接驱动获取数据库连接对象Connection后来操作JDBC元数据。
而SpringBoot方式则是直接使用项目中配置的DataSource对象实例来进行获取的Connection数据库连接对象后来操作JDBC元数据。
注意:如果你是多数据源项目,默认会使用primary数据源实例。
私信回复"code-builder"获取链接地址,喜欢的点个关注,一起学习探讨新技术。
source code怎么用_code-builder代码生成器相关推荐
- DevExpress Components16.2.6 Source Code 编译
DevExpress 是一个比较有名的界面控件套件,提供了一系列优秀的界面控件.这篇文章将展示如何在拥有源代码的情况下,对 DevExpress 的程序集进行重新编译. 特别提示:重编译后,已安装好的 ...
- Cannot find source code based button in SE24
When you are logging on to customer system for incident handling, you want to switch to source code ...
- 保存ResultSet中的数据(Java Source Code)
当我们在编写程序的时候,免不了要与数据库打交道,相信ResultSet大家也并不陌生,从数据库读取的数据将会存入其中. 操作结束关闭数据库连接以及ResultSet,否则保持数据库的连接并直接对Res ...
- Android Bluedroid source code analysis
Android Bluedroid source code analysis 图1:应用层到协议层 Android的bt整体结构如图1所示: 应用层:使用蓝牙协议的各种应用,例如:蓝牙电话.音乐等. ...
- Pyinstaller 打包 torch 后执行失败 OSError: could not get source code
1. 问题现象 系统环境 Python 3.6.9 torch 1.2.0 torchvision 0.4.0 Pyinstaller 4.5.1 Pyinstaller 打包 torch 后执行失败 ...
- Understanding The React Source Code
Understanding The React Source Code - Initial Rendering (Simple Component) I UI updating, in its ess ...
- 转: Source Code Lookup in Eclipse(主要讲的是java的)
Source Code Lookup in Eclipse https://www.intertech.com/Blog/source-code-lookup-in-eclipse/
- python3 pycharm 远程调试 启动报错 ValueError: source code string cannot contain null bytes
现象: 启动远程调试时,报错 Traceback (most recent call last):File "/root/.pycharm_helpers/pydev/pydevd.py&q ...
- 退役笔记一#MySQL = lambda sql : sql + #39; Source Code 4 Explain Plan #39;
Mysql 查询运行过程 大致分为4个阶段吧: 语法分析(sql_parse.cc<词法分析, 语法分析, 语义检查 >) >>sql_resolver.cc # JOIN.p ...
- Source Code Collection for Reproducible Research
Source Code Collection for Reproducible Research [ http://www.csee.wvu.edu/~xinl/source.html] " ...
最新文章
- Office 365系列(4)------Cutover Migrate 搬迁方式至O365上来方法及步骤总结
- java 方法 变量_Java-变量和方法
- 设置Kali Linux虚拟机连接网络
- 实现JavaSrcipt页面的跳转
- RabbitMQ高级指南:从配置、使用到高可用集群搭建
- 文献记录(part30)--DCR Disentangled component representation for sketch generation
- 监督学习无监督学习_无监督学习简介
- Android之最简单和靠谱的监听Home键和菜单键(最近任务栏)
- POE交换机供电原理及工作过程
- ECMAScript 6 -- let和const命令
- matlab重叠相加法求卷积,通过重叠相加法实现卷积的报告.doc
- 黑客SQL服务器入侵实战演习
- java 泛型 比较_java 泛型和object比较
- 贾跃亭致信债权人:将努力打工还债,请相信我!
- 【intellij idea 高级用法之:集成JIRA、UML类图插件、集成SSH、集成FTP、Database管理 】
- Pandas timedelta_range
- CMD命令大全(已更新)
- 如何在 Mac 上使用“隔空投送”?
- stm32烧写序列号
- labeltool标注工具使用说明
热门文章
- 编程语言难度排名_编程语言TOP10!该如何选择适合自己的?
- ug10许可证错误一8_面对排污许可证后监督检查,企业应做好哪些准备?
- echaer 地图_ECharts地图系列
- css background 一半_CSS小技巧
- tohexstring方法_Java Float类toHexString()方法的示例
- 用Netty撸一个心跳机制和断线重连!
- Java 中 10 大坑爹功能!
- #39;boost/iterator/iterator_adaptor.hpp#39; file not found之xcode生成时报错的解决方案
- TextArea里Placeholder换行问题
- linux进程的管理,显示及杀死