zoukankan      html  css  js  c++  java
  • Jpa 连接数据库自动生成实体类

    节约生成实体类的方式

    1、view -> Tool Windows -> Database

    2、连接mysql数据库

    3、建立存放实体的包

    4、导入必要的maven依赖

            <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.21</version>
            </dependency>
            <!--jpa-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <!-- lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    

    5、选择需要生成的表,右击 -》Scripted Extensions -> Go to Scripts Directory

    6、复制下面的文件到5中跳转的文件夹中

    Generate POJOs.groovy

    import com.intellij.database.model.DasTable
    import com.intellij.database.model.ObjectKind
    import com.intellij.database.util.Case
    import com.intellij.database.util.DasUtil
     
    /*
     * Available context bindings:
     *   SELECTION   Iterable<DasObject>
     *   PROJECT     project
     *   FILES       files helper
     */
    //修改为你的实体类的包名
    packageName = "com.demo.jpa.entity;"
    typeMapping = [
            (~/(?i)int/)                      : "Long",
            (~/(?i)float|double|decimal|real/): "Double",
            (~/(?i)bool|boolean/)             : "Boolean",
            (~/(?i)datetime|timestamp/)       : "java.util.Date",
            (~/(?i)date/)                     : "java.sql.Date",
            (~/(?i)time/)                     : "java.sql.Time",
            (~/(?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)
        new File(dir, className + ".java").withPrintWriter { out -> generate(out, table, className, fields) }
    }
     
    def generate(out, table, className, fields) {
        def tableName = table.getName()
        out.println "package $packageName"
        out.println ""
        out.println "import lombok.Data;"
        out.println ""
        out.println "import javax.persistence.*;"
        out.println "import java.io.Serializable;"
        out.println ""
        out.println "@Data"
        out.println "@Entity"
        out.println "@Table(name = "$tableName")"
        out.println "public class $className  implements Serializable {"
        out.println ""
        // 判断自增
        if ((tableName + "_id").equalsIgnoreCase(fields[0].colum) || "id".equalsIgnoreCase(fields[0].colum)) {
            out.println "	@Id"
            out.println "	@GeneratedValue(strategy=GenerationType.IDENTITY)"
        }
        fields.each() {
            if (it.annos != "") out.println "  ${it.annos}"
            if (it.colum != it.name) {
                out.println "	@Column(name = "${it.colum}")"
            }
            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),
                               colum: col.getName(),
                               type : typeStr,
                               annos: ""]]
        }
    }
     
    def javaName(str, capitalize) {
        def s = str.split(/(?<=[^p{IsLetter}])/).collect { Case.LOWER.apply(it).capitalize() }
                .join("").replaceAll(/[^p{javaJavaIdentifierPart}]/, "_").replaceAll(/_/, "")
        capitalize || s.length() == 1 ? s : Case.LOWER.apply(s[0]) + s[1..-1]
    }
    

    7、 在database视图区域选择你想要生成的表,然后Scripted Extensions -> Generate POJOs.groovy
    可以使用Shift和Ctrl多选

    8、弹出的文件选择框中,选择生成位置

    9、生成代码

  • 相关阅读:
    Hadoop 2.2.0单节点的伪分布集成环境搭建
    CentOS系统中出现错误--SSH:connect to host centos-py port 22: Connection refused
    JUnit 5和Selenium基础(三)
    JUnit 5和Selenium基础(二)
    JUnit 5和Selenium基础(一)
    如何对N个接口按比例压测
    性能测试中标记每个请求
    初学者的API测试技巧
    Web安全检查
    Groovy重载操作符
  • 原文地址:https://www.cnblogs.com/hnxbp/p/14918428.html
Copyright © 2011-2022 走看看