1 前言
现在很多人都在使用Spring Boot+MyBatis的方案,但使用Spring Boot+JPA(Hibernate)的也有不少。
Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。Spring Boot中默认使用的就是Hibernate。
为了方便使用java对象操作数据库,JPA实现了一套java类和数据表的映射机制,但需要我们要创建与表相对应的实体类,也就是一张表要建一个类,类名对应表名,类属性对应表字段。要是表太多,光是这个实体类就会让人写到发狂。这么麻烦事肯定有人想到使用自动生成的方式,现在就来总结一下有哪些方法可以快速生成JPA实体类。
2 第一种:使用Eclipse生成实体类
2.1 项目添加JPA支持
如果你的项目不是JPA项目,首先要添加JPA支持。右键点击项目->选择configure->Convert JPA Project
选择好要连接的数据库,如果没有你要的数据库,可以点击Add connection添加数据库连接,之后点击完成,就完成的JPA的支持
2.2 使用JPA Tools生成实体类
对于有JPA支持的项目,我们右键点击项目,菜单中会有的JPA Tools选项,它可以从实体类生成表,也可以表生成实体类,选择从表生成实体类,进入实体类生成配置界面
选择数据库以及要生成实体类的表
最后点击完成,就可以生成实体类了
3 第二种:使用IntelliJ IDEA生成实体类
对于使用IDEA工具的人,也是有相应的工具可以生成实体类的
3.1 添加JPA支持
在IDEA中,依次点击File -> Project Structure,弹出配置界面。再点击Modules - + - JPA,最后点击Apply - OK
3.2 添加数据源
连接数据库 点击database窗口,添加数据源
3.3 生成实体类
点击Persistence,一步步完成操作,就可以生成实体啦
以上两种工具生成的实体类,结构可能会有些许的不同,如果项目需要在两个工具之间切换,通用性就会有一些问题。那么有没有一种更通用的方法呢,答案是有的,就是使用maven插件生成。
4 第三种:使用Maven插件生成实体类
使用Maven插件生成实体,和IDE无关,可以定制更多的生成信息,比如字段映射、生成注释等,更加的灵活。
4.1 maven插件配置
在pom.xml中添加配置
<!--实体生成插件,运行hibernate-tools:hbm2java-->
<plugin>
<groupId>com.github.stadler</groupId>
<artifactId>hibernate-tools-maven-plugin</artifactId>
<version>0.1.1</version>
<executions>
<execution>
<id>Entity generation</id>
<phase>deploy</phase>
<goals>
<goal>hbm2java</goal>
</goals>
</execution>
</executions>
<configuration>
<!--模板路径,如果有定制模板,需要指定-->
<!--<templatePath>${project.basedir}/src/main/resources</templatePath>-->
<!-- Defaults: -->
<outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
<!-- Hibernate数据库连接属性文件 -->
<configFile>src/main/resources/hibernate.xml</configFile>
<!-- 反转规则配置文件,不是必须的 -->
<!--<revengFile>src/main/resources/reveng.xml</revengFile>-->
<!-- 生成实体类默认包 -->
<packageName>com.example.loope.entity</packageName>
<detectManyToMany>true</detectManyToMany>
<detectOneToOne>true</detectOneToOne>
<detectOptimisticLock>true</detectOptimisticLock>
<createCollectionForForeignKey>true</createCollectionForForeignKey>
<createManyToOneForForeignKey>true</createManyToOneForForeignKey>
<!-- 如果设置为true则生成JPA注解,若设置为false则生成hbml.xml -->
<ejb3>true</ejb3>
<jdk5>true</jdk5>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
</dependencies>
</plugin>
在resource下添加hibernate.xml和reveng.xml
4.2 hibernate.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- property 元素用于配置Hibernate中的属性键:值 -->
<!-- hibernate.connection.driver_class : 连接数据库的驱动 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- hibernate.connection.username : 连接数据库的用户名 -->
<property name="hibernate.connection.username">root</property>
<!-- hibernate.connection.password : 连接数据库的密码 -->
<property name="hibernate.connection.password">123456</property>
<!-- hibernate.connection.url : 连接数据库的地址,路径 -->
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/loope</property>
<!-- 数据库方言配置org.hibernate.dialect.MySQLDialect (选择最短的) -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
</session-factory>
</hibernate-configuration>
4.3 reveng.xml反转规则配置(不是必须的)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-reverse-engineering PUBLIC
"-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN"
"http://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd">
<hibernate-reverse-engineering>
<type-mapping>
<!--这里配置需要映射的类型-->
<sql-type jdbc-type="DATE" hibernate-type="java.util.Date"/>
<sql-type jdbc-type="TIMESTAMP" hibernate-type="java.util.Date"/>
<sql-type jdbc-type="NUMERIC" hibernate-type="java.lang.Double"/>
<sql-type jdbc-type="DECIMAL" hibernate-type="java.lang.Double" />
</type-mapping>
</hibernate-reverse-engineering>
现在运行hibernate-tools:hbm2java即可生成实体
如果想要更多的自定义生成,可以下载hibernate-tools的jar包,拷贝里面的pojo目录到模板目录下,并修改相应的模板文件即可。