IDEA上自动生成实体类带注解配置

import com.intellij.database.model.DasTable

import com.intellij.database.util.Case

import com.intellij.database.util.DasUtil

import java.text.SimpleDateFormat

/*

* Available context bindings:

* SELECTION Iterable

* PROJECT project

* FILES files helper

*/

packageName = "com.flower8.model;"

typeMapping = [

(~/(?i)int/) : "long",

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

(~/(?i)datetime|timestamp|time/) : "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 className = javaName(table.getName(), true).substring(2)

def fields = calcFields(table)

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

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

}

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

out.println "package $packageName"

out.println "import lombok.Data;"

Set types = new HashSet()

String comm = "";

fields.each() {

types.add(it.type)

String str = it.tableCommoent.toString()

comm = str.substring(0,str.length()-1) +new String("的实体类".getBytes("gbk"),"utf-8")

}

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

out.println "import java.util.Date;"

}

out.println "/**\n" +

" * @Description $comm \n" +

" * @Author tanglin\n" +

" * @Date "+ new SimpleDateFormat("yyyy/MM/dd HH:mm").format(new Date()) + " \n" +

" * @Version 1.0.0\n" +

" */"

out.println ""

out.println "@Data"

out.println "public class $className extends BaseEntity{"

out.println ""

fields.each() {

if(it.name != "id" && it.name != "createTime" && it.name != "modifyTime"){

if (isNotEmpty(it.commoent)) out.println " //${it.commoent.toString()}"

out.println " private ${it.type} ${it.name};"

}

}

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),

colName : col.getName(),

type : typeStr,

commoent: col.getComment(),

tableCommoent: table.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

}

<think>好的,我需要解决用户在IDEA中根据数据库自动生成注解实体类的问题。用户已经提供了两个引用,其中详细步骤和依赖配置可能已经涵盖。首先,我应该按照用户提供的引用内容整理出步骤,并确保所有LaTeX格式正确,同时生成相关问题。 首先,检查引用内容。引用[^1]提到了新建Maven项目、配置数据库连接、配置hibernate、调出生成工具、选择表、导出和修正。引用[^2]则提供了ojdbc8的依赖配置。用户需要的是将这些步骤整合成一个清晰的教程,可能还需要补充一些细节,如具体如何配置数据库连接,或者如何确保生成实体注解。 接下来,按照系统级指令的要求,所有行内数学表达式需要用$...$,但这里可能不太涉及数学公式,所以可能不需要。独立公式需要单独成段,同样可能不适用。但需要确保中文回答,正确使用LaTeX语法,如果有的话。 生成相关问题需要考虑用户在完成基础步骤后可能遇到的进一步疑问,比如如何处理多表关联、如何自定义生成规则、或者解决常见错误等。需要确保问题与主题相关,并帮助用户深入理解。 然后,整理回答结构。需要分步骤说明,每个步骤详细但不过于冗长。可能需要提到添加依赖、配置数据库、生成实体类的具体操作,以及修正生成后的代码,比如调整注解或字段类型。 最后,检查是否符合用户要求,比如引用标识是否正确添加,是否有遗漏的步骤,以及是否生成了相关问题。确保回答真实可靠,参考了提供的引用内容,并且结构清晰。</think>### Intellij IDEA 根据数据库生成注解实体类教程 以下是通过IDEA自动生成注解实体类的详细步骤,结合Oracle JDBC驱动配置和Hibernate工具实现: --- #### **步骤1:创建Maven项目** 1. 新建项目,选择**Maven**,设置项目名称(如`JpaDemo`)。 2. 确保项目结构包含`src/main/java`和`src/main/resources`目录。 --- #### **步骤2:添加数据库驱动依赖** 在`pom.xml`中添加**Oracle JDBC驱动**(或其他数据库驱动,如MySQL): ```xml <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>21.5.0.0</version> </dependency> ``` --- #### **步骤3:配置数据库连接** 1. 打开IDEA右侧的**Database**面板。 2. 点击`+`,选择对应数据库类型(如Oracle/MySQL)。 3. 填写连接信息(URL、用户名、密码),测试连接成功后保存。 --- #### **步骤4:配置Hibernate(可选)** 1. 在`src/main/resources`下创建`hibernate.cfg.xml`,配置数据库连接和方言: ```xml <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:XE</property> <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property> ``` --- #### **步骤5:生成实体类** 1. 右键项目根目录,选择 **New > Hibernate Mapping by Database Schema**。 2. 在弹出窗口中选择已配置的数据库连接。 3. 勾选需要生成实体类的表,设置输出包路径。 4. 勾选**Generate annotations**,点击**OK**生成代码。 --- #### **步骤6:检查与修正** 1. 生成实体类会包含JPA注解如`@Entity`、`@Table`、`@Column`。 2. 检查字段类型是否匹配(如数据库的`NUMBER`对应Java的`Long`或`Integer`)。 3. 若缺少注解,手动补充`@Id`、`@GeneratedValue`等主键注解。 --- #### **示例生成结果** ```java @Entity @Table(name = "EMPLOYEE") public class Employee { @Id @Column(name = "ID") private Long id; @Column(name = "NAME", length = 50) private String name; } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

tanglin423

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

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

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

打赏作者

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

抵扣说明:

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

余额充值