zoukankan      html  css  js  c++  java
  • JPA Map映射

    Map是一个接口,其中一个唯一键与每个值对象相关联。 因此,搜索,更新,删除等操作都是基于键来进行的。

    完整的项目目录结构如下所示 -

    集合映射实例

    在这个例子中,我们将一个对象嵌入到一个实体类中,并将其定义为一个集合类型 - Map

    private Map<Integer,Address> map=new HashMap<Integer,Address>();
    
    Java

    这个例子包含以下步骤 -

    第1步:com.yiibai.jpa包下创建一个实体类Employee.java,这个类包含员工idname 和嵌入对象(员工地址)。注解 @ElementCollection 表示嵌入对象。

    文件:Employee.java 的代码如下所示 -

    package com.yiibai.jpa;
    
    import java.util.*;
    
    import javax.persistence.*;
    
    @Entity
    
    public class Employee {
    
        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
        private int e_id;
        private String e_name;
    
        @ElementCollection
        private Map<Integer, Address> map = new HashMap<Integer, Address>();
    
        public int getE_id() {
            return e_id;
        }
    
        public void setE_id(int e_id) {
            this.e_id = e_id;
        }
    
        public String getE_name() {
            return e_name;
        }
    
        public void setE_name(String e_name) {
            this.e_name = e_name;
        }
    
        public Map<Integer, Address> getMap() {
            return map;
        }
    
        public void setMap(Map<Integer, Address> map) {
            this.map = map;
        }
    
    }
    
    Java

    第2步:com.yiibai.jpa包下创建一个嵌入对象Address.java类。 注解@Embeddable表示可嵌入对象。

    文件:Address.java 的代码如下所示 -

    package com.yiibai.jpa;
    
    import javax.persistence.*;
    
    @Embeddable
    public class Address {
    
        private int e_pincode;
        private String e_city;
        private String e_state;
    
        public int getE_pincode() {
            return e_pincode;
        }
    
        public void setE_pincode(int e_pincode) {
            this.e_pincode = e_pincode;
        }
    
        public String getE_city() {
            return e_city;
        }
    
        public void setE_city(String e_city) {
            this.e_city = e_city;
        }
    
        public String getE_state() {
            return e_state;
        }
    
        public void setE_state(String e_state) {
            this.e_state = e_state;
        }
    
    }
    
    Java

    第3步: 将实体类和其他数据库配置映射到persistence.xml文件中。

    文件:persistence.xml 的代码如下所示 -

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="2.1"
        xmlns="http://xmlns.jcp.org/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
        <persistence-unit name="Collection_Type">
            <class>com.yiibai.jpa.Employee</class>
            <class>com.yiibai.jpa.Address</class>
            <properties>
                <property name="javax.persistence.jdbc.driver"
                    value="com.mysql.jdbc.Driver" />
                <property name="javax.persistence.jdbc.url"
                    value="jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC" />
                <property name="javax.persistence.jdbc.user" value="root" />
                <property name="javax.persistence.jdbc.password"
                    value="123456" />
                <property name="eclipselink.logging.level" value="SEVERE" />
                <property name="eclipselink.ddl-generation"
                    value="create-or-extend-tables" />
            </properties>
        </persistence-unit>
    
    </persistence>
    
    XML

    com.yiibai.collection包下创建一个持久化类MapMapping.java,以便将实体对象与数据保持一致。

    文件:MapMapping.java 的代码如下所示 -

    package com.yiibai.collection;
    
    import javax.persistence.*;
    
    import com.yiibai.jpa.*;
    
    public class MapMapping {
    
        public static void main(String[] args) {
    
            EntityManagerFactory emf = Persistence.createEntityManagerFactory("Collection_Type");
            EntityManager em = emf.createEntityManager();
    
            em.getTransaction().begin();
    
            Address a1 = new Address();
            a1.setE_pincode(511000);
            a1.setE_city("Guangzhou");
            a1.setE_state("Guangdong");
    
            Address a2 = new Address();
            a2.setE_pincode(202001);
            a2.setE_city("Nanjing");
            a2.setE_state("Jiangsu");
    
            Address a3 = new Address();
            a3.setE_pincode(333301);
            a3.setE_city("Chengdu");
            a3.setE_state("Shichuan");
    
            Address a4 = new Address();
            a4.setE_pincode(80001);
            a4.setE_city("Haikou");
            a4.setE_state("Hainan");
    
            Employee e1 = new Employee();
            e1.setE_id(1);
            e1.setE_name("Maxsu");
    
            Employee e2 = new Employee();
            e2.setE_id(2);
            e2.setE_name("Leeze");
    
            Employee e3 = new Employee();
            e3.setE_id(3);
            e3.setE_name("William");
    
            Employee e4 = new Employee();
            e4.setE_id(4);
            e4.setE_name("Curry");
    
            e1.getMap().put(1, a1);
            e2.getMap().put(2, a2);
            e3.getMap().put(3, a3);
            e4.getMap().put(4, a4);
    
            em.persist(e1);
            em.persist(e2);
            em.persist(e3);
            em.persist(e4);
    
            em.getTransaction().commit();
    
            em.close();
            emf.close();
    
        }
    
    }
    
    Java

    程序输出结果

    程序执行完成后,下面的表格在MySQL工作台下生成。

    • Employee表 - 此表包含员工详细信息。要获取数据,请在MySQL中运行select * from employee查询。结果如下所示 -
    mysql> select * from employee;
    +------+---------+
    | E_ID | E_NAME  |
    +------+---------+
    |    2 | Leeze   |
    |    3 | William |
    |    4 | Curry   |
    |    1 | Maxsu   |
    +------+---------+
    4 rows in set
    
    Shell
    • employee_address表 - 此表表示员工和地址表之间的映射。 要获取数据,请在MySQL中运行select * from employee_address查询。结果如下所示 -
    mysql> select * from employee_address;
    +-----------+-----------+-----------+---------------+
    | E_CITY    | E_PINCODE | E_STATE   | Employee_E_ID |
    +-----------+-----------+-----------+---------------+
    | Hangzhou  |    533300 | Zhejiang  |          1003 |
    | Nanjing   |    780000 | Jiangsu   |          1004 |
    | Guangzhou |    501000 | GuangDong |          1000 |
    | Haikou    |    571100 | Hainan    |          1002 |
    +-----------+-----------+-----------+---------------+
    4 rows in set
  • 相关阅读:
    light oj 1105 规律
    light oj 1071 dp(吃金币升级版)
    light oj 1084 线性dp
    light oj 1079 01背包
    light oj 1068 数位dp
    light oj 1219 树上贪心
    light oj 1057 状压dp TSP
    light oj 1037 状压dp
    矩阵快速幂3 k*n铺方格
    矩阵快速幂2 3*n铺方格
  • 原文地址:https://www.cnblogs.com/borter/p/12423952.html
Copyright © 2011-2022 走看看