IDEA 中 database 快速生成实体

IDEA 快速生成实体

第一步 : 打开DataBase面板,然后连接数据库。

第二步: 创建 Generate MyPOJOs.groovy文件
在这里插入图片描述文件内容如下: 根据需要调整代码,可以生成不同格式的实体

import com.intellij.database.model.DasTable
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
import java.io.*
/*
 * Available context bindings:
 *   SELECTION   Iterable<DasObject>
 *   PROJECT     project
 *   FILES       files helper
 */

packageName = "com.xxx.busi.entity;;"
typeMapping = [
        (~/(?i)int/)                      : "Long",
        (~/(?i)float|double|decimal|real/): "Double",
        (~/(?i)datetime|timestamp/)       : "java.util.Date",
        (~/(?i)date/)                     : "java.util.Date",
        (~/(?i)time/)                     : "java.util.Date",
        (~/(?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 tableNameDispose = table.getName().substring(0, table.getName().length())
    out.println tableNameDispose
    def className = javaName(tableNameDispose, true)
    out.println className
    def fields = calcFields(table)
    PrintWriter output = new PrintWriter(new OutputStreamWriter(new FileOutputStream( new File(dir, className + ".java")), "utf-8"))
    output.withPrintWriter { out -> generate(out, className, fields,table.getName()) }
}

def generate(out, className, fields,tableName) {
    out.println "package $packageName"
    out.println "import java.io.Serializable;"
    out.println "import javax.persistence.Entity;"
    out.println "import javax.persistence.Table;"
    out.println ""
    //out.println "@Entity"
    //out.println "@Table(name = \"${tableName}\")"
    out.println "public class $className implements Serializable{"
    out.println ""
    def msum= (long)(Math.random()*1000000000000000000+1000000000000000000)
    out.println  "  private static final long serialVersionUID = ${msum}L;"
    fields.each() {
        if (isNotEmpty(it.commoent)) {
            out.println ""

            out.println "\t/**"
            out.println "\t * ${it.commoent}"
            out.println "\t */"
        }
        if (it.annos != "") out.println "  ${it.annos}"
        out.println "  private ${it.type} ${it.name};"
    }
    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) {
    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 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]
}
def isNotEmpty(content) {
    return content != null && content.toString().trim().length() > 0
}

第三步: 生成实体

如图选中需要生成实体的表:
在这里插入图片描述然后右键 -> Scripted Extensions -> Generate MyPOJOs.groovy , 然后弹出窗口,选择生成实体位置

打开生成的文件如下:

package com.xxx.busi.entity;;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Table;

public class ActEvtLog implements Serializable{

  private static final long serialVersionUID = 1113433628863057152L;
  private Long logNr;
  private String type;
  private String procDefId;
  private String procInstId;
  private String executionId;
  private String taskId;
  private java.util.Date timeStamp;
  private String userId;
  private String data;
  private String lockOwner;
  private java.util.Date lockTime;
  private Long isProcessed;


  public Long getLogNr() {
    return logNr;
  }

  public void setLogNr(Long logNr) {
    this.logNr = logNr;
  }


  public String getType() {
    return type;
  }

  public void setType(String type) {
    this.type = type;
  }


  public String getProcDefId() {
    return procDefId;
  }

  public void setProcDefId(String procDefId) {
    this.procDefId = procDefId;
  }


  public String getProcInstId() {
    return procInstId;
  }

  public void setProcInstId(String procInstId) {
    this.procInstId = procInstId;
  }


  public String getExecutionId() {
    return executionId;
  }

  public void setExecutionId(String executionId) {
    this.executionId = executionId;
  }


  public String getTaskId() {
    return taskId;
  }

  public void setTaskId(String taskId) {
    this.taskId = taskId;
  }


  public java.util.Date getTimeStamp() {
    return timeStamp;
  }

  public void setTimeStamp(java.util.Date timeStamp) {
    this.timeStamp = timeStamp;
  }


  public String getUserId() {
    return userId;
  }

  public void setUserId(String userId) {
    this.userId = userId;
  }


  public String getData() {
    return data;
  }

  public void setData(String data) {
    this.data = data;
  }


  public String getLockOwner() {
    return lockOwner;
  }

  public void setLockOwner(String lockOwner) {
    this.lockOwner = lockOwner;
  }


  public java.util.Date getLockTime() {
    return lockTime;
  }

  public void setLockTime(java.util.Date lockTime) {
    this.lockTime = lockTime;
  }


  public Long getIsProcessed() {
    return isProcessed;
  }

  public void setIsProcessed(Long isProcessed) {
    this.isProcessed = isProcessed;
  }

}
### 自动生成实体类的过程 在 IntelliJ IDEA 中,可以通过 Persistence 工具自动生成基于数据库表结构的实体类。以下是关于此功能的具体说明: #### 1. 数据源配置 为了能够生成实体类,首先需要在 IntelliJ IDEA 中设置数据源连接。这一步骤允许 IDE 连接到目标数据库并读取其元数据。具体操作如下: - 打开 **Database Tool Window**(通常位于右侧工具栏)。 - 配置一个新的数据源,提供 JDBC URL、用户名和密码等必要信息。 一旦成功建立连接,IDE 将会加载数据库中的所有表、视图和其他对象的信息[^1]。 #### 2. 使用 JPA 控制台生成实体类 IntelliJ 提供了一个内置的功能来简化从现有数据库模式生成 Java 实体类的操作: - 右键点击已导入的数据表列表。 - 选择 `Generate` -> `Data Classes...` 或者 `Entities from Tables...` 菜单项。 此时会出现一个对话框,其中可以调整一些选项,比如包名以及是否启用 Lombok 注解支持等功能。完成后确认即可让插件按照标准模板构建对应的 POJO 文件[^2]。 对于上述提到的例子来说,默认情况下生成出来的 `User` 类可能看起来像这样: ```java @Entity @Table(name = "t_user") public class User { @Id private Long id; } ``` #### 3. 定义复杂查询逻辑 如果除了基本 CRUD 操作之外还需要实现更复杂的业务需求,则可以通过编写定制化的方法签名或者利用 JPQL 来完成特定条件下的检索工作。例如下面展示的是两个简单的例子[^3]: ```java @Query("SELECT t FROM Tutorial t WHERE t.title LIKE %?1%") List<Tutorial> searchByTitle(String keyword); ``` 另外还可以借助 MyBatis 的 XML 映射文件来进行更加灵活多变的设计方案[^4]: ```xml <select id="selectUsers" parameterType="map" useGeneratedKeys="true" keyProperty="id"> SELECT * FROM users u WHERE username=#{username} AND password=#{password}; </select> ``` 以上就是有关于如何在 IntelliJ IDEA 当中运用 persistence 功能来自动生成实体类的相关指导内容啦!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值