使用IntelliJ IDEA连接数据库,快速创建实体类对象,自动生成get,set,toString方法以及无参有参构造器

简介: 使用IntelliJ IDEA连接数据库,快速创建实体类对象,自动生成get,set,toString方法以及无参有参构造器

使用IntelliJ IDEA连接数据库,快速创建实体类对象


1.IntelliJ IDEA连接MySQL数据库

IntelliJ IDEA功能很强大,以前不知道有这样的提升工作效率的方法,虽然有的工具确实可以直接生成实体类,mapper文件,还有dao接口,但是个人觉得涉及到复杂业务还是只生成实体类比较好,后面部分就自己搞定就可以了。


打开项目:



1、点击右侧的Datesource图标,要是没有该图标,请去自行百度

2、点击 + 号

3、选择 datasource

4、选择 mysql

a041e6d1087a4d1aaecb176341871b03.png


1、填写一个连接名,随便填什么都行

2、填写数据库连接的 IP地址,比如本地数据库可以填写:localhost或者127.0.0.1

3、填写数据库开放的端口号,一般没设置的话默认都是3306

4、选择user&password

5、填写数据库的用户名

6、填写数据库密码

7、填写你需要连接的数据库名

8、这个就是数据库url

9、这里会有一个驱动需要点击下载,图中是已经下载好了

10、ok



5131bc2e48704f60840b6c8972e75619.png


其它的操作就和Navicat Premium或者SQL yog的操作差不多了,这里不过多赘述。



2.使用内置方法创建实体类对象

1.首先选择表

5fd5f12d6eb54512b5f7e204358154d1.png


2.选择操作




3.选择要生成的位置




3.使用脚本自动创建生成实体类对象,自动生成get,set,toString方法以及无参有参构造器


跟上面方法一样


这里只说如何添加脚本,步骤:



然后创建Generate SimpleBeans.groovy的文件将下面代码复制进去

package com.alibaba.mybatis.entity
import com.intellij.database.model.DasTable
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil
import java.text.SimpleDateFormat
/*
 *   Available   context bindings:
 *   SELECTION   Iterable<DasObject>
 *   PROJECT     project
 *   FILES       files helper
 */
packageName = ""
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"
]
FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
    SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) }
}
def generate(table, dir) {
    def className = javaName(table.getName(), true)
    def fields = calcFields(table)
    packageName = getPackageName(dir)
    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 ""
    Set types = new HashSet()
    fields.each() {
        types.add(it.type)
    }
    if (types.contains("Date")) {
        out.println "import java.util.Date;"
    }
    // 生成开头文档
    out.println ""
    out.println "/**\n" +
            " * @author xiaozhi\n" + //1. 修改idea为自己名字
            " * @create " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " \n" +
            " * @description  \n" +
            " */"
    out.println ""
    out.println '@SuppressWarnings("all")' // 去除右边黄色警告,清爽编码环境
    out.println "public class $className {"
    fields.each() {
        out.println ""
        // 输出数据库的字段注释
        if (isNotEmpty(it.commoent)) {
            out.println "\t/**"
            out.println "\t * ${it.commoent.toString()}"
            out.println "\t */"
        }
        // 输出成员变量
        out.println "\tprivate ${it.type} ${it.name};"
    }
    //生成无参构造函数
    out.println ""
    out.print "\tpublic "
    out.print className
    out.print "() {"
    out.println "}"
    //生成全参构造函数
    out.println ""
    out.print "\tpublic "
    out.print className
    out.print "("
    out.print getAllArgs(fields)
    out.print ") {"
    out.println ""
    fields.each() {
        out.println "\t\tthis.${it.name} = ${it.name};"
    }
    out.println "\t}"
    // 输出toString方法
    out.println ""
    out.println "\t@Override"
    out.println "\tpublic String toString() {"
    out.println "\t\treturn \"" + className + "{\" +"
    out.println getToString(fields)
    out.println "\t\t\t\t'}';"
    out.println "\t}"
    // 输出get/set方法
    fields.each() {
        out.println ""
        out.println "\tpublic ${it.type} get${it.name.capitalize()}() {"
        out.println "\t\treturn this.${it.name};"
        out.println "\t}"
        out.println ""
        out.println "\tpublic void set${it.name.capitalize()}(${it.type} ${it.name}) {"
        out.println "\t\tthis.${it.name} = ${it.name};"
        out.println "\t}"
    }
    out.println ""
    out.println "}"
}
def getToString(fields) {
    StringBuilder str = new StringBuilder()
    fields.each() {
        str = str.append("\t\t\t\t\", ${it.name}='\" + ${it.name} + '\\'' +\n")
    }
    def s = str.toString().replaceFirst(', ', "")
    return s.toString().replaceAll('\\n$', "")
}
def getAllArgs(fields) {
    StringBuilder AllArgs = new StringBuilder()
    fields.each() {
        AllArgs = AllArgs.append("${it.type} ${it.name}, ")
    }
    return AllArgs.toString().replaceAll(', $', "")
}
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
        def comm = [
                colName : col.getName(),
                name    : javaName(col.getName(), false),
                type    : typeStr,
                commoent: col.getComment(),
                annos   : "\t@Column(name = \"" + col.getName() + "\")"]
        if ("id".equals(Case.LOWER.apply(col.getName())))
            comm.annos += ["@Id"]
        fields += [comm]
    }
}
def javaName(str, capitalize) {
    str = str.toString()
    str = str.replaceFirst('t_', "")
    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
}
static String changeStyle(String str, boolean toCamel) {
    if (!str || str.size() <= 1)
        return str
    if (toCamel) {
        String r = str.toLowerCase().split('_').collect { cc -> Case.LOWER.apply(cc).capitalize() }.join('')
        return r[0].toLowerCase() + r[1..-1]
    } else {
        str = str[0].toLowerCase() + str[1..-1]
        return str.collect { cc -> ((char) cc).isUpperCase() ? '_' + cc.toLowerCase() : cc }.join('')
    }
}
相关文章
|
Java 应用服务中间件 Maven
在IntelliJ IDEA中如何配置使用Maven以创建Tomcat环境
所以,别担心这些工具看起来有些吓人,实际上这些都是为了帮助你更好的完成工作的工具,就像超市里的各种烹饪工具一样,尽管它们看起来可能很复杂,但只要你学会用,它们会为你烹饪出一道道美妙的食物。这就是学习新技能的乐趣,让我们一起享受这个过程,攀登知识的高峰!
811 27
|
11月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL中的数据库对象
本教程详细介绍了MySQL数据库中的常见对象,包括表、索引、视图、事件、存储过程和存储函数的创建与管理。内容涵盖表的基本操作、索引的使用、视图简化查询、事件调度功能等,并通过具体示例演示相关SQL语句的使用方法。
230 0
|
存储 缓存 NoSQL
Redis中的常用命令-get&set&keys&exists&expire&ttl&type的详细解析
总的来说,这些Redis命令提供了处理存储在内存中的键值对的便捷方式。通过理解和运用它们,你可以更有效地在Redis中操作数据,使其更好地服务于你的应用。
607 17
|
IDE 程序员 开发工具
只用正版!教你5个方法,白嫖JetBrains家族的所有产品,包含:IntelliJ IDEA、PyCharm、WebStorm、CLion、Rider
程序员晚枫分享了5种官方认证的免费使用JetBrains家族产品的方法,包括内容创作者计划、开源项目支持、教育许可证、用户组支持和开发者认可计划。这些方法帮助个人开发者与小型团队合法获取强大开发工具,如IntelliJ IDEA、PyCharm等,降低开发成本,提升效率。同时提醒大家遵守使用规范,尊重知识产权。
2734 13
|
存储 SQL 数据库
【赵渝强老师】达梦数据库的数据库对象
达梦数据库包含基本与复杂两大类数据库对象。基本对象如表、索引、视图、序列和同义词,通过单一DDL语句创建和管理。表是数据存储核心,支持多种数据类型;索引提升查询速度,常见类型包括聚集、唯一、函数等索引;视图提供虚表功能;序列生成有序整数;同义词简化对象访问。复杂对象包括存储过程、函数和触发器,需用DMSQL语言开发,适用于更复杂的业务逻辑处理。文中通过实例详细介绍了各类对象的创建与使用方法。
729 3
|
Java Maven Spring
【SpringBug】lombok插件失效,但是没有报错信息,@Data不能生成get和set方法
解决写了@Data注解,但是在测试文件中生成的反编译target文件Us二Info中没有get和set方法
1306 16
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE &#39;log_%&#39;;`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
1629 2
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
|
Java Windows
IDEA不使用lombok,如何快速生成get和set方法
【11月更文挑战第10天】在 IntelliJ IDEA 中生成 `get` 和 `set` 方法有多种方式:通过菜单操作、使用快捷键或自定义模板。菜单操作包括选择“Code”菜单中的“Generate...”,快捷键为“Alt + Insert”。自定义模板可在“File”-&gt;“Settings”-&gt;“Editor”-&gt;“Code Style”-&gt;“Java”中设置。批量生成时,可多选变量一次性生成。
4464 2
|
C#
SET访问器和GET访问器
SET访问器和GET访问器
208 2

热门文章

最新文章