idea生成mysql脚本_Java IDEA根据database以及脚本代码自动生成DO,DAO,SqlMapper文件(一)...

本文介绍了如何在Java IDEA中利用Groovy脚本自动生成DO, DAO, SqlMapper文件。首先,配置数据库连接,然后创建Groovy脚本文件分别用于生成DO, DAO, SqlMapper。脚本支持自定义表名前缀,获取表和字段注释,以及主键识别。脚本生成的DO文件需先于DAO和SqlMapper文件生成,以确保依赖关系正确。文章还提醒注意项目路径不能包含中文。" 111276277,10294562,MyBatis多表操作与动态SQL详解,"['MyBatis', 'Java开发', '数据库操作', '事务管理', '缓存技术']
摘要由CSDN通过智能技术生成

根据数据库代码自动生成的插件挺多的,这里主要分享两种:

1.根据database以及脚本代码自动生成

2.根据mybatis-generator-core自动生成(下一章节进行分享,包含sqlserver的注释获取)

这篇主要介绍的是database以及groovy脚本代码自动生成,可以自定义去除数据库表的前缀生成相应的类名,支持获取表的备注,字段备注,主键获取。

database以及脚本代码自动生成相对于mybatis-generator-core自动生成,其优点是不需要将生成的文件的代码嵌入到项目中,而是相当于IDEA的脚本插件使用,但是不好同时生成DO,DAO,SqlMapper文件,因为同时生成的话,反而使用mybatis-generator-core更加方便。

注:使用database以及脚本代码自动生成的时候得先生成DO文件,再DAO文件,最后生成SqlMapper文件,具体原因将在流程里面做介绍

废话不多,直接进入操作过程:

1.配置Database,链接数据库

这一步网上教程很多,也相对简单,这里不做详细介绍了,先选择数据源,这里使用MySql做介绍

9e61bbd65538da7e277cb77d621289fe.png

接下来就是配置链接信息,需要填写的如下图,点击测试通过之后直接APPLY,OK即可

c9b070361c6763ccb548f97b5e030279.png

2.接下来创建脚本文件

3ce61233f6225e8893fdb743933539cb.png

跳转到脚本目录下新建三个文件,分别为生成DO,DAO,SQLMAPPER文件,代码如下:

Generate ModePOJOs.groovy

importcom.intellij.database.model.DasTableimportcom.intellij.database.model.ObjectKindimportcom.intellij.database.util.Caseimportcom.intellij.database.util.DasUtilimport java.io.*

importjava.text.SimpleDateFormat/*** @Description 生成DO文件

* @zsy

* @Date 2020-07-13*/packageName= ""tableComment= ""typeMapping=[

(~/(?i)tinyint|smallint|mediumint|int/) : "Integer",

(~/(?i)bigint/) : "Long",

(~/(?i)bool|bit/) : "Boolean",

(~/(?i)float|double|decimal|real/) : "Double",

(~/(?i)datetime|timestamp|date|time/) : "Date",

(~/(?i)blob|binary|bfile|clob|raw|image/): "InputStream",

(~/(?i)/) : "String"]//自定义需要去除的表头,根据自己的数据库表头自定义。自定义作者名称//只有后面紧接着的是"_"下滑线的表头会被处理,比如:t_estcolumn会被处理,testcolumn不会被处理

tableHeaderRemoved = ["t","t_sys"]

authorName= "zsy"FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->SELECTION.filter { itinstanceof DasTable && it.getKind() ==ObjectKind.TABLE }.each { generate(it, dir) }

}

def generate(table, dir) {

def className= javaClassName(table.getName(), true)

def fields=calcFields(table)

packageName=getPackageName(dir)

tableComment=table.getComment()if(tableComment==null){

tableComment= ""}

tableComment= tableComment.replaceAll("\n"," ")

className= className +"DO"PrintWriter printWriter= new PrintWriter(new OutputStreamWriter(new FileOutputStream(new File(dir, className + ".java")), "UTF-8"))

printWriter.withPrintWriter {out->generate(out, className, fields,table)}

}//获取包所在文件夹路径

def getPackageName(dir) {return dir.toString().replaceAll("\\\\", ".").replaceAll("/", ".").replaceAll("^.*src(\\.main\\.java\\.)?", "") + ";"}

def generate(out, className, fields,table) {

out.println"package $packageName"out.println""out.println"import java.io.Serializable;"out.println"import io.swagger.annotations.*;"out.println"import lombok.*;"Set types= newHashSet()

fields.each() {

types.add(it.type)

}if (types.contains("Date")) {

out.println"import java.util.Date;"}if (types.contains("InputStream")) {

out.println"import java.io.InputStream;"}

out.println""out.println"/**\n" +

" * @Description ${tableComment} \n" +

" * @Author ${authorName} \n" +

" * @Date "+ new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " \n" +

" */"out.println""out.println"@Data"out.println"@ApiModel(description= \"${tableComment}\")"out.println"public class $className implements Serializable {"out.println""out.println genSerialID()

i= 0fields.each() {

out.println""

if(it.commoent==null){

it.commoent= ""}

it.commoent= it.commoent.replaceAll("\n","").replaceAll("\r","")//输出注释

if(isNotEmpty(it.commoent)) {

out.println"\t/**"out.println"\t * ${it.commoent.toString()}"out.println"\t */"}

out.println"\t@ApiModelProperty(value = \"${it.commoent}\", position = ${i})"

//输出成员变量

out.println "\tprivate ${it.type} ${it.name};"i++}

out.println""out.println"}"}

def calcFields(table) {//加载当前数据库主键

def primaryKey = ""def prKey=DasUtil.getPrimaryKey(table);if (prKey != null) {

def keyRef

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值