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();
}