本章节将简单介绍在 JPA 中,怎样实现对象的映射。
在 JPA 中,要实现对象的映射需要借助 @Entity 和 @Table 注解。主要步骤如下:
(1)创建实体类,例如:User.java
(2)使用注解将实体类声明成一个数据库实体类
(3)在 persistence.xml 配置文件中配置实体类
public class User { private Integer id; private String name; private Integer age; //...忽略getter和setter.... }
使用 @Entity 和 @Table 注解建立实体类和数据表之前的映射关系。其中:
对实体类的映射,默认使用当前类的简单名称作为类名;如果在使用 JPQL 做查询的时候,就要使用该名字实现数据的查询;例如:
SELECT u FROM User u;
上面的 User 为默认使用的类名,可以通过 @Entity 中的 name 属性修改。如下:
@Entity(name="UserInfo") public class User { //... }
上面代码中,将类的名称修改为 UserInfo,那么上面的 JPQL 中的 User 修改为 UserInfo 即可。如下:
SELECT u FROM UserInfo u;
用来指定实体类映射的表的相关信息,如:表名,默认和类名一致。如下:
@Table(name="t_user") public class User { //... }
上面代码中,将映射的表名修改为 t_user。
实例:将上面创建的 User 类使用 @Entity 和 @Table 修饰,代码如下:
@Entity @Table public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column private String name; @Column private Integer age; //...忽略getter和setter.... }
上面配置好实体类后,还需要在 persistence.xml 配置文件中进行配置。persistence.xml 配置文件中相关元素的配置说明如下:
<class>:指定需要扫描的实体类
<exclude-unlisted-classes>:设置为 true 的时候,表示不扫描这里没有列出来的类
<jar-file>:指定对项目中引入的 jar 包中的类进行扫描
例如:在 persistence.xml 中,配置我们的 <persistence-unit> 单元。指定 JPA 提供者和声明实体类,如下:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0"> <persistence-unit name="openJPA" transaction-type="RESOURCE_LOCAL"> <!-- JPA提供者 --> <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider> <!-- 声明实体类 --> <class>com.huangx.openjpa.hello.entity.User</class> <!-- 配置JPA数据库属性 --> <properties> <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/openjpa_learn?useSSL=false& serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8"/> <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/> <property name="openjpa.ConnectionUserName" value="root"/> <property name="openjpa.ConnectionPassword" value="aaaaaa"/> <!-- 自动生成表 --> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> <!-- 不使用加载时强化和编译时强化,使用运行时Unenhanced --> <property name="openjpa.ClassLoadEnhancement" value="false" /> <property name="openjpa.DynamicEnhancementAgent" value="false" /> <property name="openjpa.RuntimeUnenhancedClasses" value="supported" /> </properties> </persistence-unit> </persistence>