对象的映射

本章节将简单介绍在 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 注解建立实体类和数据表之前的映射关系。其中:

@Entity 注解

对实体类的映射,默认使用当前类的简单名称作为类名;如果在使用 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 注解

用来指定实体类映射的表的相关信息,如:表名,默认和类名一致。如下:

@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&amp;
                      serverTimezone=UTC&amp;useUnicode=true&amp;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>
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号