最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2017年04月17日 16:26:01   作者:小邋遢plus  
本篇文章主要介紹了mybatis高級(jí)映射一對(duì)多查詢實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。

1.需求分析:

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

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

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

sql語句如下:

 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é)果如下:


映射要求:

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

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

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

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.編寫mapper.java和mapper.xml文件

代碼如下:

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的解釋加在了代碼中 ,如下:

<?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的類型
   -->
  <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:指定的類型,可以使用別名
  -->
  <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ì)一的,注意繼承至之前寫好的resultMap。

5 寫測(cè)試代碼:

 /**
  * 查詢訂單關(guān)聯(lián)查詢用戶信息和訂單明細(xì)信息
  */
 @Test
 public void testFindOrderAndOrderDetailResultMap() {
  try {
   System.out.println("start.................");
   //通過得到的SqlSessionFactory打開回話sqlSession
   SqlSession sqlSession = SqlSessionFactory.openSession();
   //通過會(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é)果如下:

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

6 .總結(jié)

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

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

相關(guān)文章

  • Java實(shí)現(xiàn)赫夫曼樹(哈夫曼樹)的創(chuàng)建

    Java實(shí)現(xiàn)赫夫曼樹(哈夫曼樹)的創(chuàng)建

    給定N個(gè)權(quán)值作為N個(gè)葉子結(jié)點(diǎn),構(gòu)造一棵二叉樹,若該樹的帶權(quán)路徑長(zhǎng)度(WPL)達(dá)到最小,稱這樣的二叉樹為最優(yōu)二叉樹,也稱為哈夫曼樹(Huffman Tree)。這篇文章主要就是為大家介紹如何通過Java實(shí)現(xiàn)赫夫曼樹,需要的朋友可以參考一下
    2021-12-12
  • spring依賴注入成功但在調(diào)用接口的時(shí)候拿到的依賴卻是null問題

    spring依賴注入成功但在調(diào)用接口的時(shí)候拿到的依賴卻是null問題

    這篇文章主要介紹了spring依賴注入成功但在調(diào)用接口的時(shí)候拿到的依賴卻是null問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • [Java]詳解Socket和ServerSocket學(xué)習(xí)筆記

    [Java]詳解Socket和ServerSocket學(xué)習(xí)筆記

    即時(shí)類應(yīng)用或者即時(shí)類的游戲,HTTP協(xié)議很多時(shí)候無法滿足于我們的需求,這會(huì),Socket對(duì)于我們來說就非常實(shí)用了。本篇文章主要介紹了Socket和ServerSocket,有興趣的可以了解一下。
    2016-12-12
  • Java如何給Word文檔添加多行文字水印

    Java如何給Word文檔添加多行文字水印

    這篇文章主要介紹了Java如何給Word文檔添加多行文字水印,文章圖文講解的很清晰,有對(duì)于這方面不太懂得同學(xué)可以學(xué)習(xí)下
    2021-02-02
  • 基于OpenID?Connect及Token?Relay實(shí)現(xiàn)Spring?Cloud?Gateway

    基于OpenID?Connect及Token?Relay實(shí)現(xiàn)Spring?Cloud?Gateway

    這篇文章主要介紹了基于OpenID?Connect及Token?Relay實(shí)現(xiàn)Spring?Cloud?Gateway,Spring?Cloud?Gateway旨在提供一種簡(jiǎn)單而有效的方式來路由到API,并為API提供跨領(lǐng)域的關(guān)注點(diǎn),如:安全性、監(jiān)控/指標(biāo)和彈性
    2022-06-06
  • Java類加載器ClassLoader用法解析

    Java類加載器ClassLoader用法解析

    這篇文章主要介紹了Java類加載器ClassLoader用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 基于springboot的flowable工作流實(shí)戰(zhàn)流程分析

    基于springboot的flowable工作流實(shí)戰(zhàn)流程分析

    這篇文章主要介紹了基于springboot的flowable工作流實(shí)戰(zhàn)流程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Java 在Word文檔中添加藝術(shù)字的示例

    Java 在Word文檔中添加藝術(shù)字的示例

    這篇文章主要介紹了Java 在Word文檔中添加藝術(shù)字的示例,幫助大家使用Java處理word文檔,感興趣的朋友可以了解下
    2020-09-09
  • 關(guān)于spring中不同包中類名相同報(bào)錯(cuò)問題的總結(jié)

    關(guān)于spring中不同包中類名相同報(bào)錯(cuò)問題的總結(jié)

    這篇文章主要介紹了關(guān)于spring中不同包中類名相同報(bào)錯(cuò)問題的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Java如何使用spire進(jìn)行word文檔的替換詳解

    Java如何使用spire進(jìn)行word文檔的替換詳解

    創(chuàng)作一份文案經(jīng)常會(huì)高頻率地使用某些詞匯,如地名、人名、人物職位等,若表述有誤,就需要整體撤換,下面這篇文章主要給大家介紹了關(guān)于Java如何使用spire進(jìn)行word文檔的替換的相關(guān)資料,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

龙游县| 资中县| 通山县| 舞阳县| 松溪县| 石门县| 巢湖市| 河津市| 景宁| 东乌珠穆沁旗| 宁阳县| 法库县| 鄢陵县| 东丰县| 台东县| 通城县| 丹棱县| 齐齐哈尔市| 龙州县| 车致| 漠河县| 绍兴市| 东乡族自治县| 长海县| 桂林市| 客服| 武义县| 莱州市| 洱源县| 左权县| 日喀则市| 定远县| 河津市| 疏勒县| 讷河市| 天门市| 资中县| 钟祥市| 琼结县| 丰县| 惠安县|