欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

springboot使用mybatis一對(duì)多的關(guān)聯(lián)查詢(xún)問(wèn)題記錄

 更新時(shí)間:2022年01月26日 16:53:06   作者:__莫等閑  
這篇文章主要介紹了springboot使用mybatis一對(duì)多的關(guān)聯(lián)查詢(xún)問(wèn)題記錄,剛好最近有個(gè)需求需要做到關(guān)聯(lián)的查詢(xún),時(shí)間也算充足,所以用sql來(lái)寫(xiě),于是踩了很久坑,終于跳出來(lái)了,小小記錄一下

springboot使用mybatis一對(duì)多的關(guān)聯(lián)查詢(xún)

由于剛開(kāi)始寫(xiě)java不久,對(duì)sql語(yǔ)句的熟悉度還是不夠熟練,雖然現(xiàn)在使用的mybatisPlus比較多,但我始終覺(jué)得sql不能忘也不能不用,剛好最近有個(gè)需求需要做到關(guān)聯(lián)的查詢(xún),時(shí)間也算充足,所以用sql來(lái)寫(xiě),于是踩了很久坑,終于跳出來(lái)了,小小記錄一下。

一對(duì)多

# 我這里是一對(duì)多查詢(xún),一張主表兩張副表,最后還要有一張VO表(就是做關(guān)聯(lián)映射用的),主表和副表的實(shí)體我就不貼了,以下是VO實(shí)體

在這里插入圖片描述

這是我的controller

@RequestMapping(value = "/queryChartAll", method = RequestMethod.GET)
public R<?> queryChartAll(){
    List<StatementEnteringVO> statementEnteringVO = statementEnteringMapper.queruMapperPage();
    if(statementEnteringVO != null){
        return R.data(statementEnteringVO);
    }else{
        return R.fail(ResultCode.ERROR);
    }
}

mapper

public interface StatementEnteringMapper extends BaseMapper<StatementEntering> {
    List<StatementEnteringVO> queruMapperPage();
}

mapper.xml(注意了,最難受也是最坑的)

為了展示方便,我貼少點(diǎn)的字段,不然老長(zhǎng)的代碼看球不明白,再注一下:一對(duì)多使用collection,一對(duì)一使用association,文章主講一對(duì)多的。所以也不對(duì)association做解釋了,感興趣的朋友可以自己去了解一下,用法是一樣的。

<?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.ld.ldstat.mapper.StatementEnteringMapper">
    <resultMap id="queryChartAllTwo" type="com.ld.ldstat.vo.StatementEnteringVO">
        <id property="id" jdbcType="BIGINT" column="sid"></id>
        <result property="theDate" jdbcType="DATE" column="the_date"></result>
        <result property="deptName" jdbcType="VARCHAR" column="dept_name"></result>
        <result property="deptId" jdbcType="BIGINT" column="dept_id"></result>
        
        <!--這里是對(duì)應(yīng)vo實(shí)體的表1實(shí)體-->
        <collection property="cashCar" javaType="java.util.List" ofType="com.ld.ldstat.entity.CashCar">
            <id property="id" jdbcType="BIGINT" column="cid"></id>
            <result property="parentId" jdbcType="BIGINT" column="c_parent_id"/>
            <result property="projectName" jdbcType="VARCHAR" column="c_project_name"/>
            <result property="ninetyWithin" jdbcType="INTEGER" column="ninety_within"/>
            <result property="ninetyExcept" jdbcType="INTEGER" column="ninety_except"/>
            <result property="cashCar" jdbcType="INTEGER" column="cash_car"/>
        </collection>
        
        <!--這里是對(duì)應(yīng)vo實(shí)體的表2實(shí)體-->
        <collection property="subtotalAll" ofType="com.ld.ldstat.entity.SubtotalAll">
            <id property="id" jdbcType="BIGINT" column="aid"></id>
            <result property="parentId" jdbcType="BIGINT" column="a_parent_id"/>
            <result property="projectName" jdbcType="VARCHAR" column="a_project_name"/>
            <result property="subtotalType" jdbcType="INTEGER" column="subtotal_type"/>
            <result property="task" jdbcType="INTEGER" column="task"/>
            <result property="theDay" jdbcType="INTEGER" column="the_day"/>
        </collection>
    </resultMap>
    <select id="queruMapperPage" resultMap="queryChartAllTwo">
        SELECT
        se.id sid,se.the_date,se.dept_name,
        ca.id cid,ca.project_name c_project_name,ca.parent_id c_parent_id,ca.ninety_Within,ca.ninety_except,ca.cash_car,
        sa.id aid,sa.project_name a_project_name,sa.parent_id a_parent_id,sa.task,sa.the_day
        FROM
        statement_entering se
        LEFT JOIN cash_car ca on se.id = ca.parent_id
        LEFT JOIN subtotal_all sa on se.id = sa.parent_id
        
        <!--        條件可根據(jù)自己的需求增加啦-->
    </select>
</mapper>

以下是需要注意的點(diǎn)(我就是在這里踩了好久的坑)

以下sql用的是左連接語(yǔ)句LEFT JOIN,具體的sql語(yǔ)句我也不解釋了,因?yàn)橐私獾奶嗔耍緦擂巍?/p>

這里的這些字段必須要使用別名,為啥?因?yàn)閹讖埍淼淖侄蜗嗤詴?huì)出現(xiàn)覆蓋的問(wèn)題,比如我副表1和副表2同時(shí)存在一個(gè)相同字段project_name,如果不給其聲明別名,副表2該字段的數(shù)據(jù)會(huì)被副表1的該字段覆蓋掉,原理我也解釋不清楚,哈哈?。?/p>

在這里插入圖片描述

對(duì)應(yīng)的映射字段要使用別名,上圖

在這里插入圖片描述

線劃的丑了些,將就吧!

看下最終獲取到的數(shù)據(jù)結(jié)構(gòu)

在這里插入圖片描述

完美,理想中的效果。。。

至于最終效果圖為啥這么多null,不用懷疑,這些是我沒(méi)有寫(xiě)對(duì)應(yīng)的映射

到此這篇關(guān)于springboot使用mybatis一對(duì)多的關(guān)聯(lián)查詢(xún)的文章就介紹到這了,更多相關(guān)springboot使用mybatis關(guān)聯(lián)查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何獲取Maven項(xiàng)目的版本號(hào)

    如何獲取Maven項(xiàng)目的版本號(hào)

    最近需要在項(xiàng)目中獲取項(xiàng)目的版本號(hào),最笨的方法莫過(guò)于硬編碼一個(gè)版本號(hào),當(dāng)然之前我也是這么干的。不過(guò)閑下來(lái)的時(shí)候突發(fā)奇想Spring Boot項(xiàng)目中pom.xml定義的版本號(hào)(也就是project.version的值)能不能通過(guò)API獲得呢?于是利用摸魚(yú)的時(shí)間研究了這種無(wú)聊透頂?shù)臇|西。
    2021-05-05
  • SpringBoot2.0集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息

    SpringBoot2.0集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息

    這篇文章主要介紹了SpringBoot2.0集成WebSocket實(shí)現(xiàn)后臺(tái)向前端推送信息,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • Java編程實(shí)現(xiàn)生成給定范圍內(nèi)不重復(fù)隨機(jī)數(shù)的方法小結(jié)

    Java編程實(shí)現(xiàn)生成給定范圍內(nèi)不重復(fù)隨機(jī)數(shù)的方法小結(jié)

    這篇文章主要介紹了Java編程實(shí)現(xiàn)生成給定范圍內(nèi)不重復(fù)隨機(jī)數(shù)的方法,結(jié)合實(shí)例形式總結(jié)分析了java基于數(shù)學(xué)運(yùn)算與判斷實(shí)現(xiàn)不重復(fù)隨機(jī)數(shù)的生成功能,需要的朋友可以參考下
    2017-07-07
  • java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出

    java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出

    這篇文章主要介紹了java導(dǎo)出excel 瀏覽器直接下載或者或以文件形式導(dǎo)出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 解決SpringBoot項(xiàng)目啟動(dòng)后網(wǎng)頁(yè)顯示Please sign in的問(wèn)題

    解決SpringBoot項(xiàng)目啟動(dòng)后網(wǎng)頁(yè)顯示Please sign in的問(wèn)題

    這篇文章主要介紹了解決SpringBoot項(xiàng)目啟動(dòng)后網(wǎng)頁(yè)顯示Please sign in的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Java漢字轉(zhuǎn)拼音工具類(lèi)完整代碼實(shí)例

    Java漢字轉(zhuǎn)拼音工具類(lèi)完整代碼實(shí)例

    這篇文章主要介紹了java漢字轉(zhuǎn)拼音工具類(lèi)完整代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 老程序員教你一天時(shí)間完成Java迷宮小游戲

    老程序員教你一天時(shí)間完成Java迷宮小游戲

    最近經(jīng)常在機(jī)房看同學(xué)在玩一個(gè)走迷宮的游戲,比較有趣,自己也用java寫(xiě)一個(gè)實(shí)現(xiàn)隨機(jī)生成迷宮的算法,其實(shí)就是一個(gè)圖的深度優(yōu)先遍歷算法.
    2021-08-08
  • 詳解Java中的final關(guān)鍵字

    詳解Java中的final關(guān)鍵字

    子類(lèi)可以在父類(lèi)的基礎(chǔ)上改寫(xiě)父類(lèi)內(nèi)容,為了避免這種隨意改寫(xiě)的情況,Java提供了final 關(guān)鍵字,用于修飾不可改變內(nèi)容。本文就來(lái)詳細(xì)說(shuō)說(shuō)final關(guān)鍵字的使用,需要的可以參考一下
    2022-10-10
  • Java模擬實(shí)現(xiàn)撲克牌洗牌和發(fā)牌的示例代碼

    Java模擬實(shí)現(xiàn)撲克牌洗牌和發(fā)牌的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用Java模擬實(shí)現(xiàn)撲克牌洗牌和發(fā)牌的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-09-09
  • java使用回溯法求解數(shù)獨(dú)示例

    java使用回溯法求解數(shù)獨(dú)示例

    這篇文章主要介紹了java使用回溯法求解數(shù)獨(dú)示例,大家參考使用吧
    2014-01-01

最新評(píng)論