idea @value提示_idea通过数据库生成java实体类(lombok版)

点击上方蓝色字体,选择“星标公众号”

优质文章,第一时间送达

1.连接数据库, 使用idea自带的插件Database

72e8e115c65b9edc9468e9d5c2c9ab48.png

55905f5fd38262007dfa26f146e38ac4.png

2.点击表名,右键。Scripted Extensions =>  Generate POJOs.groovy

94a49d66d8dab5107a6313ffa6860c0d.png

3.选择生成的实体类的位置

1c05d47ab25eb3bf7cac142c57d3a654.png

4.自定义的实体类已生成,其中@Data为我们生成了基本的get set toString方法,@Id注解在tk.mybatis插件中需要使用到,@ApiModelProperty注解生成swagger文档

Generate POJOs.groovy 脚本解释

import com.intellij.database.model.DasTableimport com.intellij.database.util.Caseimport com.intellij.database.util.DasUtil /* * Available context bindings: *   SELECTION   Iterable *   PROJECT     project *   FILES       files helper */ packageName = "com.topex.admin.entity;"    // 此处指定包路径,也就对应实体类中的package com.topex.admin.entity;typeMapping = [    // 此处指定对应的类型映射,如下:数据库中bigint对应生成java的Long,int|tinyint生成Integer...        (~/(?i)bigint/)                      : "Long",        (~/(?i)int|tinyint/)                 : "Integer",        (~/(?i)float|double|decimal|real/): "java.math.BigDecimal",        (~/(?i)date|datetime|timestamp/)       : "java.util.Date",        (~/(?i)time/)                     : "java.sql.Time",        (~/(?i)/)                         : "String"] FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->  SELECTION.filter { it instanceof DasTable }.each { generate(it, dir) }} def generate(table, dir) {  def className = javaName(table.getName(), true)  def fields = calcFields(table)  new PrintWriter(new OutputStreamWriter(new FileOutputStream( new File(dir, className + ".java")), "utf-8")).withPrintWriter { out -> generate(out, className, fields) }} def generate(out, className, fields) {   // 从这里开始,拼实体类的具体逻辑代码  out.println "package $packageName"  out.println ""  out.println ""  out.println "import lombok.Data;"     // 因为我使用了lombok插件,使用到了Data注解,所以在引包时加了这一行  out.println "import io.swagger.annotations.ApiModelProperty;"   // 同上,使用了swagger文档,所以引入到需要的注解  out.println "import javax.persistence.Id;"  // tk.mybatis插件需用时需要@id注解,所以引入,不需要就去掉  out.println ""  out.println "@Data"  out.println "public class $className {"  out.println ""  int i = 0  fields.each() {   // 遍历字段,按下面的规则生成    // 输出注释,这里唯一的是id特殊判断了一下,如果判断it.name == id, 则多添加一行@Id    if (it.name == "id") {      if (!isNotEmpty(it.commoent)) {        out.println "\t/**"        out.println "\t * 主键id"        out.println "\t */"        out.println "\t@ApiModelProperty(value = \"主键id\", position = ${i})"      }      out.println "\t@Id"    }    if (isNotEmpty(it.commoent)) {      out.println "\t/**"      out.println "\t * ${it.commoent}"      out.println "\t */"      out.println "\t@ApiModelProperty(value = \"${it.commoent}\", position = ${i})"    }    if (it.annos != "") out.println "  ${it.annos}"    out.println "\tprivate ${it.type} ${it.name};"    out.println ""    i++  }  out.println ""  out.println "}"} def calcFields(table) {  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 : javaName(col.getName(), false),                       type : typeStr,                       commoent: col.getComment(),                       annos: ""]]  }} def isNotEmpty(content) {  return content != null && content.toString().trim().length() > 0} 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]}
温暖提示

为了方便大家更好的学习,本公众号经常分享项目干货源码案例给大家去练习,如果本公众号没有你要学习的功能案例,你可以联系小编(微信:wcy18898375730)提供你帮助哦!

5ab3d5c9d39a7e45a313a3dbd39db13a.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值