source code怎么用_code-builder代码生成器

背景

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

9a4761f3936cd1261d5cdd8913a593c2.png

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_typeapp_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.....

生成的控制开关

de7a2f2b289976f879a236da28b29418.png

并不是每一次的编译或者打包时都需要生成对应的实体,针对这种情况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_typeapp_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

使用方式

0c10b4efdd30bb5b8f238b52e9072edd.png

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

a7629615d05ee6ae56ad9f7f6a5edd58.png

怎么使用?

SpringBoot 方式使用

  1. 运行项目就可以根据配置生成对应的文件

Maven Plugin 方式使用

  1. 执行mvn clean命令用于清空target目录下的内容
  2. 执行mvn compile命令编译项目并且生成实体类

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

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

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

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

私信回复"code-builder"获取链接地址,喜欢的点个关注,一起学习探讨新技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556254.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@Transactional注解的失效场景

Transactional注解的失效场景 引言 Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功、要么同时失败。使用Transactional注解时需要注意许多的细节,不然你会发现Transactional总是…

Spring 事务方法与非事务方法相互调用 @Transactional 注解失效不回滚?

写这篇文章的初衷呢就是最近遇到了一个Spring事务的大坑。与其说是坑,还不如说是自己事务这块儿太薄弱导致的(自嘲下)。 项目环境 Spring Boot 下面开始问题描述,发生的过程有点长,想直接看方案的直接跳过哦~&#x…

vue后端必须接口吗_前后端分离模式,后端说开发完才能给接口文档,合理吗

背景:汇总了下老王在其他平台的原创回复,欢迎关注老王原创公众号【软件老王】,关注不迷路。一、后端开发完接口才给出接口文档,合理吗?本人所在的项目组做项目过程中,后端不会先给出接口文档,而…

JAVA那点破事,并发、IO模型、集合、线程池、死锁、非阻塞、AQS...

JDK、JRE、JVM 三者有什么关系? 答案: JDK(全称 Java Development Kit),Java开发工具包,能独立创建、编译、运行程序。 JDK JRE java开发工具(javac.exe/java.exe/jar.exe) JRE(…

PTA 最小生成树-kruskal

7-92 最小生成树-kruskal 分数 10 全屏浏览题目 作者 任唯 单位 河北农业大学 题目给出一个无向连通图,要求求出其最小生成树的权值。 温馨提示:本题请使用kruskal最小生成树算法。 输入格式: 输出格式: 输出一个整数表示最小生成树的各边的长度之和。…

java实现单链表

链表是java数据结构中一种很基础很常见却也很重要的数据结构,JDK中许多内置jar包基于单链表实现,比如像我们熟悉的linkedList等,为什么要使用链表呢? 我们知道java中很多集合的底层是基于数组实现的,数组有一个很重要…

sql 两表数据合并_多表查询SQL语句

本篇文章中主要讲述以下内容:一、表的加法合并两张表的过程:然后运用sql语句:select 课程号,课程名称 from course union select 课程号,课程名称 from course1以上子句会把两个表中重复数据删除。要想不删除重复的行,则需要在上面…

angularjs增删改查数据_MongoDB数据读写操作(增删改查)总结

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。一、在执行mongo.exe文件后,进入MongoDB的shell 操作1、创建一个数据库use users2、查…

SpringAop与AspectJ的联系与区别____比较分析 Spring AOP 和 AspectJ 之间的差别

SpringAop与AspectJ的联系与区别 区别 AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件。 spring aop Spring提供了四种类型的Aop支持 * 基于经典的…

ssrf漏洞内网渗透_渗透小白看了也能明白的SSRF

什么是SSRF含义服务器端请求伪造(SSRF)是指攻击者能够从易受攻击的Web应用程序发送精心设计的请求的对其他网站进行攻击。(利用一个可发起网络请求的服务当作跳板来攻击其他服务)攻击者能够利用目标帮助攻击者访问其他想要攻击的目标攻击者要求服务器为他…

高并发之服务降级和服务熔断____服务降级、熔断、限流的区别

高并发之服务降级和服务熔断 服务降级: 服务压力剧增的时候根据当前的业务情况及流量对一些服务和页面有策略的降级,以此环节服务器的压力,以保证核心任务的进行。 同时保证部分甚至大部分任务客户能得到正确的相应。也就是当前的请求处理…

Controller数据导出Excel 详细教程——easypoi-base,easypoi-web,easypoi-annotation

Controller获取数据导出Excel&#xff0c;详细教程 1&#xff1a;导入对应依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.3</version></dependency><dependency&g…

01 - java 开始

Java 的优势 java适合做web后台 java配置环境的时候 java的安装目录&#xff1a;JAVA_HOMEjdk的安装目录&#xff1a;%JAVA_HOME%\bin java的执行机制 先将.java的文件用 javac 编译成 .class的字节码文件再将这些 .class 的字节码文件用 java 执行&#xff08;执行的是文…

15 - java 继承

java继承 This > Son Super > Father Object 类是所有类的顶级父类 只要创建一个类默认都会继承这个顶级父类 – Object 在子类继承父类里面 构造器必须先构造一个父类&#xff08;先有爸爸&#xff0c;才有儿子&#xff09;&#xff0c;必须首先构造父类&#xff0…

easyPOI基本用法详解

文章目录easyPOI基本用法1.Excel文件的简单导入和导出1.1准备工作1.2导入1.3导出1.4图片的导出1.5图片的导入1.6excel模板导出文件1.7excel转html2.Word文件导出2.1使用word模板导出2.2使用word模板导出多页3.excel导入时验证3.1环境准备3.2实战演练3.3注意事项easyPOI基本用法…

16 - java 类加载顺序

类的加载顺序 类对象、静态变量是存在元空间的方法区&#xff0c;实例对象是new出来的&#xff0c;放在堆里面的 一个类加载到内存的完整过程 加载父类 --> 加载子类 --> 构造父类 --> 构造子类 class文件要从磁盘加载到内存形成对象 内存靠地址去取寻址 – 随机存…

360全景倒车影像怎么看_别克关怀-后视镜和倒车影像 倒车时到底看哪个

很多人在考驾照的时候&#xff0c;倒车倒的都很熟练&#xff0c;但是一上路就不行了。一方面&#xff0c;这是因为道路上的状况多变&#xff0c;时常有行人经过&#xff0c;另一方面&#xff0c;上路之后&#xff0c;遇见的停车位千奇百怪&#xff0c;什么样子的都有&#xff0…

17 - 引用类型比较内容

引用数据类型比较 引用数据类型直接比较一定是 false --> 比较的是它俩的地址 Animail a1 new Animal(); Animail a2 new Animal(); System.out.println(a1 a2); //false特殊的 String String s1 "a"; String s2 "a"; System.out.println(s1 s…

springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

springboot使用jxls导出excel 实现思路&#xff1a; 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板&#xff0c;然后在具体的导出接口业务代码里通过IO流加载到这个Excel模板文件&#xff0c;读取指定的工作薄(也就是excel左下角的Shee…

idea(mac) 使用收集

其实 idea 后面的 webstorm phpstorm pycharm… 都大同小异 idea 使用积累1. 设置代码区字体大小2. command​ 滚轮改变字体大小3. 去掉代码区中间的白线4. 查看项目配置5. 自动删除类中无用包、自动导入包6. 显示行号和方法分隔符7. 提示的时候忽略大小写8. 统一显示 utf - 8…