IDEA 常用数据库脚本

该Groovy脚本用于自动生成基于数据库表的JavaBean和Mapper类。它首先选择目录保存文件,然后遍历数据库表,为每个表创建一个Bean类,包含字段、注解和getter/setter方法。同时,还会生成对应的Mapper接口。脚本考虑了不同数据类型的映射,并能处理主键信息。
摘要由CSDN通过智能技术生成

生成Bean.groovy

import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil

//基础路径
packageName = "com.zframeworks"

FILES.chooseDirectoryAndSave("Choose directory", "选择存储生成文件的位置") { dir ->
    SELECTION.filter { it instanceof DasTable }.each { run(it, dir) }
}

def run(table, dir) {
    //文件名
    def fileName = javaName(table.getName(), true)

    //生成bean
    new File(dir, "\\beans\\"+fileName+".java").withPrintWriter('utf-8') { out -> CreateBean(out, table) }

}

//生成bean文件内容
def CreateBean(out, table) {
    def fileName = javaName(table.getName(), true)

    //获取字段信息
    def fields = calcFields(table)

    out.println "package $packageName"+".beans;"
    out.println "import com.zframeworks.core.SuperBean;"
    out.println "import com.baomidou.mybatisplus.annotation.TableId;"
    out.println "public class $fileName extends SuperBean{"

    fields.each() {
        //判读是否是主健
        if(it.isKey){
            out.println "  @TableId"
            out.println "  private ${it.type} ${it.name};//${it.commoent}"
        }else{
            out.println "  private ${it.type} ${it.name};//${it.commoent}"
        }

    }
    out.println ""
    fields.each() {
        out.println ""
        out.println "  public ${it.type} get${it.name.capitalize()}() {"
        out.println "    return ${it.name};"
        out.println "  }"
        out.println ""
        out.println "  public void set${it.name.capitalize()}(${it.type} ${it.name}) {"
        out.println "    this.${it.name} = ${it.name};"
        out.println "  }"
        out.println ""
    }
    out.println "}"
}


//获取字段信息
def calcFields(table) {
    //字段类型
    typeMapping = [
            (~/(?i)int/)                      : "int",
            (~/(?i)float|double|decimal|real/): "java.math.BigDecimal",
            (~/(?i)datetime|timestamp/)       : "String",
            (~/(?i)date/)                     : "String",
            (~/(?i)time/)                     : "String",
            (~/(?i)/)                         : "String"
    ]

    // 加载当前数据库主键
    def primaryKey = ""
    def prKey = DasUtil.getPrimaryKey(table);
    if (prKey != null) {
        def keyRef = prKey.getColumnsRef();
        if (keyRef != null) {
            def it = keyRef.iterate();
            while (it.hasNext()) {
                // 默认只处理单主键
                primaryKey = it.next();
            }
            //primaryKey = javaName(primaryKey, false);
        }
    }


    DasUtil.getColumns(table).reduce([]) { fields, col ->
        def spec = Case.LOWER.apply(col.getDataType().getSpecification())
        def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
        fields += [[
                           name : col.getName(),//名称
                           type : typeStr,//类型
                           commoent: col.getComment(),//字段描述
                           isKey: col.getName().equals(primaryKey),//判读字段是否是主健
                           annos: ""]]
    }
}



//首字符大写
def javaName(str, capitalize) {
    def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
            .collect { Case.LOWER.apply(it).capitalize() }
            .join("")
            .replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
    capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}






生成Bean与Mapper.groovy

import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil

//基础路径
packageName = "com.zframeworks"

FILES.chooseDirectoryAndSave("Choose directory", "选择存储生成文件的位置") { dir ->
    SELECTION.filter { it instanceof DasTable }.each { run(it, dir) }
}

def run(table, dir) {
    //文件名
    def fileName = javaName(table.getName(), true)

    //生成bean
    new File(dir, "\\beans\\"+fileName+".java").withPrintWriter('utf-8') { out -> CreateBean(out, table) }

    //生成mapper
    new File(dir, "\\mapper\\"+fileName+ "Mapper.java").withPrintWriter('utf-8') { out -> CreateMapper(out, table) }

}

//生成bean文件内容
def CreateBean(out, table) {
    def fileName = javaName(table.getName(), true)

    //获取字段信息
    def fields = calcFields(table)

    out.println "package $packageName"+".beans;"
    out.println "import com.zframeworks.core.SuperBean;"
    out.println "import com.baomidou.mybatisplus.annotation.TableId;"
    out.println "public class $fileName extends SuperBean{"

    fields.each() {
        //判读是否是主健
        if(it.isKey){
            out.println "  @TableId"
            out.println "  private ${it.type} ${it.name};//${it.commoent}"
        }else{
            out.println "  private ${it.type} ${it.name};//${it.commoent}"
        }

    }
    out.println ""
    fields.each() {
        out.println ""
        out.println "  public ${it.type} get${it.name.capitalize()}() {"
        out.println "    return ${it.name};"
        out.println "  }"
        out.println ""
        out.println "  public void set${it.name.capitalize()}(${it.type} ${it.name}) {"
        out.println "    this.${it.name} = ${it.name};"
        out.println "  }"
        out.println ""
    }
    out.println "}"
}


//获取字段信息
def calcFields(table) {
    //字段类型
    typeMapping = [
            (~/(?i)int/)                      : "int",
            (~/(?i)float|double|decimal|real/): "java.math.BigDecimal",
            (~/(?i)datetime|timestamp/)       : "String",
            (~/(?i)date/)                     : "String",
            (~/(?i)time/)                     : "String",
            (~/(?i)/)                         : "String"
    ]

    // 加载当前数据库主键
    def primaryKey = ""
    def prKey = DasUtil.getPrimaryKey(table);
    if (prKey != null) {
        def keyRef = prKey.getColumnsRef();
        if (keyRef != null) {
            def it = keyRef.iterate();
            while (it.hasNext()) {
                // 默认只处理单主键
                primaryKey = it.next();
            }
            //primaryKey = javaName(primaryKey, false);
        }
    }


    DasUtil.getColumns(table).reduce([]) { fields, col ->
        def spec = Case.LOWER.apply(col.getDataType().getSpecification())
        def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
        fields += [[
                           name : col.getName(),//名称
                           type : typeStr,//类型
                           commoent: col.getComment(),//字段描述
                           isKey: col.getName().equals(primaryKey),//判读字段是否是主健
                           annos: ""]]
    }
}

/**
 * 生成Mapper
 * @param out
 * @param table
 * @return
 */
def CreateMapper(out, table) {
    def fileName = javaName(table.getName(), true)

    out.println "package $packageName"+".mapper;"
    out.println "import org.springframework.stereotype.Repository;"
    out.println "import com.baomidou.mybatisplus.core.mapper.BaseMapper;"
    out.println "import $packageName"+".beans."+fileName+";"
    out.println "@Repository"
    out.println "public interface $fileName"+"Mapper extends BaseMapper<$fileName>{"
    out.println "}"
}

//首字符大写
def javaName(str, capitalize) {
    def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
            .collect { Case.LOWER.apply(it).capitalize() }
            .join("")
            .replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
    capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}






生成Mapper.groovy

import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil

//基础路径
packageName = "com.zframeworks"

FILES.chooseDirectoryAndSave("Choose directory", "选择存储生成文件的位置") { dir ->
    SELECTION.filter { it instanceof DasTable }.each { run(it, dir) }
}

def run(table, dir) {
    //文件名
    def fileName = javaName(table.getName(), true)

    //生成mapper
    new File(dir, "\\mapper\\"+fileName+ "Mapper.java").withPrintWriter('utf-8') { out -> CreateMapper(out, table) }

}


/**
 * 生成Mapper
 * @param out
 * @param table
 * @return
 */
def CreateMapper(out, table) {
    def fileName = javaName(table.getName(), true)

    out.println "package $packageName"+".mapper;"
    out.println "import org.springframework.stereotype.Repository;"
    out.println "import com.baomidou.mybatisplus.core.mapper.BaseMapper;"
    out.println "import $packageName"+".beans."+fileName+";"
    out.println "@Repository"
    out.println "public interface $fileName"+"Mapper extends BaseMapper<$fileName>{"
    out.println "}"
}


//首字符大写
def javaName(str, capitalize) {
    def s = com.intellij.psi.codeStyle.NameUtil.splitNameIntoWords(str)
            .collect { Case.LOWER.apply(it).capitalize() }
            .join("")
            .replaceAll(/[^\p{javaJavaIdentifierPart}[_]]/, "_")
    capitalize || s.length() == 1? s : Case.LOWER.apply(s[0]) + s[1..-1]
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵戬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值