一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專(zhuān)注于服務(wù)器技術(shù)及軟件下載分享
分類(lèi)導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - mybatis高級(jí)映射一對(duì)多查詢實(shí)現(xiàn)代碼

mybatis高級(jí)映射一對(duì)多查詢實(shí)現(xiàn)代碼

2020-09-12 16:07小邋遢plus Java教程

本篇文章主要介紹了mybatis高級(jí)映射一對(duì)多查詢實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

1.需求分析:

在開(kāi)發(fā)中會(huì)遇到這樣一個(gè)問(wèn)題,查詢訂單信息,級(jí)聯(lián)查詢出用戶信息和訂單明細(xì)信息

2.sql語(yǔ)句實(shí)現(xiàn)

2.1確定主查詢表:訂單表
2.2確定關(guān)聯(lián)查詢表:用戶表, 訂單明細(xì)表

sql語(yǔ)句如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
select
 orders.*,
 t_user.address,
 t_user.name,
 t_user.brithday,
 orderdetail.id orderdetail_id,
 orderdetail.orderid,
 orderdetail.itemsid
 from
 orders,
 t_user,
 orderdetail
 where
orders.userid=t_user.id AND orderdetail.orderid=orders.id;

查詢結(jié)果如下:

mybatis高級(jí)映射一對(duì)多查詢實(shí)現(xiàn)代碼

映射要求:

不能出現(xiàn)重復(fù)的訂單信息

3.編碼實(shí)現(xiàn)

在orders.java中添加屬性,List<OrdersDetail> ordersDetails 。類(lèi)比hibernate學(xué)習(xí),代碼如下:

?
1
2
3
4
5
6
7
8
9
public class Orders {
 private int id;
 private String note;
 private Date dateTime;
 private String number;
 private int userId;
 private User user;
 private List<OrdersDetail> ordersDetails;//看這里
}

最終會(huì)將訂單信息映射到orders中,訂單所對(duì)應(yīng)的訂單明細(xì)映射到orders的ordersDetails集合中,從上面查詢結(jié)果圖中可以看出最終的訂單信息將為2條(orders信息不重復(fù)),每個(gè)訂單orders中的屬性存儲(chǔ)了該訂所對(duì)應(yīng)的訂單明細(xì)。

4.編寫(xiě)mapper.java和mapper.xml文件

代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package com.djp.config.mapper;
 
import com.djp.pojo.Orders;
import com.djp.pojo.OrdersCustom;
 
import java.util.List;
 
public interface OrdersCustomMapper {
 /**
  * 查詢訂單關(guān)聯(lián)查詢用戶信息和訂單明細(xì)信息
  *
  * @return
  */
 List<Orders> findOrderAndOrderDetailResultMap();
 
 /**
  * 查詢訂單關(guān)聯(lián)查詢用戶信息
  *
  * @return
  */
 List<OrdersCustom> findOrderUser() throws Exception;
 
 /**
  * 使用resultMap映射
  *
  * @return
  * @throws RuntimeException
  */
 List<Orders> findOrderUserResultMap() throws RuntimeException;
}

對(duì)于mapper.xml的解釋加在了代碼中 ,如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper namespace="com.djp.config.mapper.OrdersCustomMapper">
 <!--訂單查詢關(guān)聯(lián)用戶和訂單明細(xì)的信息的resultMap-->
 <resultMap id="orderAndOrderDetailResultMap" type="orders" extends="ordersUserResultMap">
  <!--配置訂單信息 使用繼承下面的-->
  <!--配置訂單關(guān)聯(lián)的用戶信息 使用繼承下面的-->
   <!--配置訂單關(guān)聯(lián)的訂單明細(xì)信息
    一條訂單關(guān)聯(lián)查詢出了多條明細(xì),要使用collection進(jìn)行映射
    collection :對(duì)關(guān)聯(lián)查詢到多條記錄映射到集合中
    property:將關(guān)聯(lián)查詢到的多條記錄映射到com.djp.pojo.Orders中的哪個(gè)屬性
    ofType:指定映射到list集合屬性中的pojo的類(lèi)型
   -->
  <collection property="ordersDetails" ofType="OrdersDetail">
   <!--
    id:訂單明細(xì)的唯一標(biāo)示
    property:將訂單明細(xì)的唯一標(biāo)示映射到com.djp.pojo.OrdersDetail中的哪個(gè)屬性
   -->
   <id column="orderdetail_id" property="id"/>
   <result column="orderid" property="orderId"/>
   <result column="itemsid" property="itemsId"/>
  </collection>
 </resultMap>
 <!--查詢訂單明細(xì)關(guān)聯(lián)查詢用戶信息和訂單明細(xì)信息的statement-->
 <select id="findOrderAndOrderDetailResultMap" resultMap="orderAndOrderDetailResultMap">
 select
  orders.*,
  t_user.address,
  t_user.name,
  t_user.brithday,
  orderdetail.id orderdetail_id,
  orderdetail.orderid,
  orderdetail.itemsid
  from
  orders,
  t_user,
  orderdetail
  where
  orders.userid=t_user.id AND orderdetail.orderid=orders.id
 </select>
 <!--訂單查詢關(guān)聯(lián)用戶的resultMap
  將整個(gè)查詢結(jié)果映射到com.djp.pojo.Orders中
 -->
 <resultMap id="ordersUserResultMap" type="com.djp.pojo.Orders">
  <!--配置映射的訂單信息
   result:普通列
   id:指定查詢列中的唯一標(biāo)示,訂單信息中的唯一標(biāo)示,如果有多個(gè)列組成多個(gè)唯一標(biāo)示,配置多個(gè)id
   column:訂單信息的唯一標(biāo)示
   property:訂單信息的唯一標(biāo)示,列所映射到Orders中的哪個(gè)屬性
  -->
  <id column="id" property="id"/>
  <result column="note" property="note"/>
  <result column="dateTime" property="dateTime"/>
  <result column="number" property="number"/>
  <result column="userId" property="userId"/>
  <!--配置訂單關(guān)聯(lián)的用戶信息
   association:用于映射關(guān)聯(lián)查詢單個(gè)用戶的信息
   property:將要關(guān)聯(lián)查詢的用戶信息映射到orders中的哪個(gè)屬性
   javaType:指定的類(lèi)型,可以使用別名
  -->
  <association property="user" javaType="user">
   <!--
    id :關(guān)聯(lián)查詢用戶的唯一標(biāo)示
    column:指定表示用戶信息的列
    property:對(duì)應(yīng)user.java中的哪個(gè)屬性
   -->
   <id column="id" property="id"/>
   <result column="name" property="name"/>
   <result column="pwd" property="pwd"/>
   <result column="address" property="address"/>
   <result column="brithday" property="brithday"/>
  </association>
 </resultMap>
 <!-- 查詢訂單關(guān)聯(lián)查詢用戶信息 使用resultMap-->
 <select id="findOrderUserResultMap" resultMap="ordersUserResultMap">
select orders.*,t_user.address,t_user.name,t_user.brithday from orders, t_user where orders.userid=t_user.id
 </select>
 <!--查詢訂單關(guān)聯(lián)查詢用戶信息-->
 <select id="findOrderUser" resultType="OrdersCustom">
select orders.*,t_user.address,t_user.name,t_user.brithday from orders, t_user where orders.userid=t_user.id
 </select>
</mapper>

代碼有點(diǎn)多,不怕得,下面的是之前的一對(duì)一的,注意繼承至之前寫(xiě)好的resultMap。

5 寫(xiě)測(cè)試代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 * 查詢訂單關(guān)聯(lián)查詢用戶信息和訂單明細(xì)信息
 */
@Test
public void testFindOrderAndOrderDetailResultMap() {
 try {
  System.out.println("start.................");
  //通過(guò)得到的SqlSessionFactory打開(kāi)回話sqlSession
  SqlSession sqlSession = SqlSessionFactory.openSession();
  //通過(guò)會(huì)話得到用戶的代理
  OrdersCustomMapper ordersCustomMapper = sqlSession.getMapper(OrdersCustomMapper.class);
  List<Orders> list = ordersCustomMapper.findOrderAndOrderDetailResultMap();
   for (Orders item : list) {
   System.out.println("訂單+用戶+訂單明細(xì):"+item);
  }
 } catch (Exception e) {
  e.printStackTrace();
 }
}

運(yùn)行結(jié)果如下:

mybatis高級(jí)映射一對(duì)多查詢實(shí)現(xiàn)代碼

從圖中可看出我們需要的訂單信息,關(guān)聯(lián)查詢出的用戶信息,關(guān)聯(lián)查詢出的訂單明細(xì)信息都出來(lái)了!

6 .總結(jié)

mybatis使用resultMap實(shí)現(xiàn)一對(duì)多查詢用collection對(duì)關(guān)聯(lián)查詢出的多條記錄映射到一個(gè)list集合中

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.jianshu.com/p/42dc7598eb70?utm_source=tuicool&utm_medium=referral#

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲 激情| 99热精品国产麻豆 | 亚洲成人三级 | 福利国产精品 | 亚洲老头老太hd | 免费午夜网站 | 激情小视频 | 日本网络视频www色高清免费 | 久久成人免费大片 | 国产高清在线精品一区二区三区 | 欧美精品久久一区二区三区 | 日本中文字幕二区三区 | 欧美粗黑巨大gay | 九九热在线免费观看 | 百合漫画咱啪全彩抚慰 | 亚洲sss视频| 奇米影视4444| 久久福利影院 | 久久精品麻豆国产天美传媒果冻 | 欧美人交性视频在线香蕉 | 国产亚洲精品自在线亚洲情侣 | 国产人成激情视频在线观看 | 99在线精品免费视频 | 91一区二区在线观看精品 | xxnx日本免费护士 | 99热免费在线 | 91四虎国自产在线播放线 | 深夜在线小视频 | 日韩免费一区 | 国产精品一级视频 | 亚洲AV无码专区国产乱码网站 | 欧美一区二区三区不卡视频 | 调教麻麻成贱m | 欧美a在线观看 | 鸥美三级 | 经典千人斩一区二区视频 | 黑人巨茎大战欧美白妇 | 日韩美女强理论片 | 欧美日韩一区视频 | 色多多幸福宝 | 成人18视频在线观看 |