4.3 Java EE – Eins-zu-viele-Abfrage

Beziehungsdiagramm zwischen Benutzern und Bestellungen

        Eine stärker kontaktierte Beziehung ist eine Eins-zu-Viele-Beziehung (oder Viele-zu-Eins-Beziehung) als eine Eins-zu-Eins-Beziehung. Beispielsweise kann ein Benutzer mehrere Bestellungen haben, und ein Benutzer kann auch mehrere Bestellungen besitzen. Die Beziehung zwischen Benutzern und Bestellungen ist in der Abbildung dargestellt.

1. Das <collection>-Element

        In MyBatis wird die Eins-zu-viele-Beziehung über das <collection>-Element gehandhabt. Die meisten Attribute des <collection>-Elements sind mit denen des <association>-Elements identisch, es enthält jedoch auch ein spezielles Attribut – ofType. Das ofType-Attribut entspricht dem javaType-Attribut und wird verwendet, um den Typ der Elemente anzugeben, die im Sammlungsklassenattribut im Entitätsklassenobjekt enthalten sind.

Wie das <collection>-Element konfiguriert ist

         Das <collection>-Element ist ein untergeordnetes Element des <resultMap>-Elements und das <collection>-Element verfügt über zwei Konfigurationsmodi: verschachtelte Abfrage und verschachteltes Ergebnis. 

a. Verschachtelte Abfragemethode

<collection property="ordersList" 

column="id" 

ofType="com.mac.pojo.Orders"

select=" com.mac.mapper.OrdersMapper.selectOrders"/>

b. Verschachtelte Ergebnismethode

<collection property="ordersList"ofType="com.mac.pojo.Orders">

    <id property="id" column="orders_id" />

    <result property="number" column="number" />

</collection>

 2. Nehmen Sie als Nächstes die Eins-zu-Viele-Beziehung zwischen Benutzern und Bestellungen als Beispiel, um detailliert zu erklären, wie Sie in MyBatis mit einer Eins-zu-Viele-Beziehung umgehen. Die spezifischen Schritte sind wie folgt.

1. Erstellen Sie in der Datenbank mit dem Namen mybatis zwei Datentabellen, nämlich tb_user (Benutzerdatentabelle) und tb_orders (Bestelltabelle), und fügen Sie vorab mehrere Testdaten in die Tabelle ein.

USE mybatis;

# 创建一个名称为tb_user的表

CREATE TABLE tb_user (

  id int(32) PRIMARY KEY AUTO_INCREMENT,

  username varchar(32),

  address varchar(256) );

# 插入3条数据

INSERT INTO tb_user VALUES ('1', '小明', '北京');

INSERT INTO tb_user VALUES ('2', '李华', '上海');

INSERT INTO tb_user VALUES ('3', '李刚', '上海');
# 创建一个名称为tb_orders的表
CREATE TABLE tb_orders (

  id int(32) PRIMARY KEY AUTO_INCREMENT,

  number varchar(32) NOT NULL,

  user_id int(32) NOT NULL,

  FOREIGN KEY(user_id) references tb_user(id));
#插入3条数据

INSERT INTO tb_orders VALUES ('1', '1000011', '1');

INSERT INTO tb_orders VALUES ('2', '1000012', '1');

INSERT INTO tb_orders VALUES ('3', '1000013', '2');

 

  

2. Erstellen Sie eine persistente Klasse „Bestellungen“ und definieren Sie Attribute wie Bestell-ID und Bestellnummer in der Klasse.

public class Orders {

    private Integer id;     //订单id

    private String number; //订单编号

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    @Override

    public String toString() {

        return "Orders [id=" + id + ", number=" + number + "]";

    }

}

3. Erstellen Sie eine persistente Klasse „Benutzer“ und definieren Sie Attribute wie Benutzer-ID, Benutzername, Benutzeradresse und benutzerbezogene Bestellungen in der Klasse.

public class Users {

    private Integer id;                         // 用户编号

    private String username;              // 用户姓名

    private String address;                 // 用户地址

    private List<Orders> ordersList;  // 用户关联的订单

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public List<Orders> getOrdersList() {
        return ordersList;
    }

    public void setOrdersList(List<Orders> ordersList) {
        this.ordersList = ordersList;
    }

    @Override

    public String toString() {

        return "User [id=" + id + ", username=" + username

                + ", address="+ address + ", ordersList=" + ordersList + "]"; }

}


4. Erstellen Sie die Benutzerentitätszuordnungsdatei UsersMapper.xml und schreiben Sie die Konfiguration der Eins-zu-Viele-Zuordnungsabfrage in die Datei. 

<mapper namespace="com.mac.mapper.UsersMapper">

      <resultMap type="Users" id="UserWithOrdersResult">

      <!-- 只展示了部分标签内容,一对多关联映射 -->

<collection property="ordersList" ofType="Orders">

<id property="id" column="orders_id"/>

<result property="number" column="number"/>

</collection>

      </resultMap>

</mapper>

5. Führen Sie in der Kernkonfigurationsdatei mybatis-config.xml UsersMapper.xml ein und laden Sie die Zuordnungsdatei UsersMapper.xml in das Programm. 

<mapper resource="com/mac/mapper/UsersMapper.xml”/>

6. Schreiben Sie in der Testklasse MyBatisTest die Testmethode findUserTest(). 

public void findUserTest() {

    // 1.通过工具类生成SqlSession对象

    SqlSession session = MyBatisUtils.getSession();

    // 2.查询id为1的用户信息

    Users users = session.selectOne("com.mac.mapper."

                            + "UsersMapper.findUserWithOrders", 1);

    // 3.输出查询结果信息

    System.out.println(users);

    // 4.关闭SqlSession

    session.close();

}

Supongo que te gusta

Origin blog.csdn.net/W_Fe5/article/details/131563918
Recomendado
Clasificación