Vue 入門到實戰 十一 Vuex

目錄

11.1狀態管理與應用場景

1)state

2)Getters

3)Mutations

4)Actions

5)Module

11.2Vuex的安裝與基本應用

11.3Vuex的核心概念


一句話解釋vuex:就是單獨成立一個組件,這個組件存儲共享的數據,其他組件都可以從這個共享組件里面抽取數據。這就是vuex的作用。

11.1狀態管理與應用場景

本章主要講解了Vuex的基本用法。通過本章的學習,掌握Vuexstategettersmutationsactions等核心概念,掌握如何使用Vuex進行狀態管理。

狀態管理,管理的是全局狀態,即全局變量。Vuex是一個專為Vue.js應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態,并以相應的規則保證狀態以一種可預測的方式發生變化。

大白話:Vuex 是一個插件,可以幫我們管理 Vue 通用的數據 (多組件共享的數據)。例如:購物車數據 個人信息數

狀態(state:驅動應用的數據源,即組件中的data

視圖(view:以聲明方式將狀態映射到視圖,如{{counter}}

操作action:響應在視圖上的用戶輸入導致的狀態變化,即組件的函數methods

1)state

state是存儲的單一狀態,是存儲的基本數據。

2)Getters

getters是store的計算屬性,對state的加工,是派生出來的數據。就像computed計算屬性一樣,getter返回的值會根據它的依賴被緩存起來,且只有當它的依賴值發生改變才會被重新計算。

3)Mutations

mutations提交更改數據,使用store.commit方法更改state存儲的狀態。(mutations同步函數)

4)Actions

actions像一個裝飾器,提交mutation,而不是直接變更狀態。(actions可以包含任何異步操作)

5)Module

Module是store分割的模塊,每個模塊擁有自己的state、getters、mutations、actions。

在較大型的項目中,將有許多組件用到同一變量,比如,一個登錄的狀態,很多頁面組件都需要這個信息。在這樣的情景下,使用Vuex進行登錄狀態的統一管理就很方便。當然,雖然麻煩但也可以時刻在對應頁面操作cookie。所以,狀態管理不是必需的,所有狀態管理能做的,都能用其它方式實現,但是狀態管理提供了統一管理的地方,操作方便,也更加明確。但一些狀態只是父組件和子組件共享,不推薦使用狀態管理實現,而用$emitprops即可簡單實現。

11.2Vuex的安裝與基本應用

1.安裝Vuex

VueRouter一樣,將Vuex添加到項目中也有4種主要方法:本地獨立版本方法、CDN方法、NPM方法以及命令行工具(VueCLI)方法。

2.項目文件中導入并顯式地使用Vuex

使用VueCLI安裝Vuex后,首先,在項目的/src/store/index.js文件中,導入Vuex模塊,并創建一個store(倉庫)。

然后,在項目主文件main.js中導入Vuex,并顯式地使用Vue實例調用Vuex

    import?{ createApp }?from?'vue'import?App?from?'./App.vue'import?store?from?'./store'?//導入store目錄中的index.js,Vuex的創建與配置在該文件中createApp(App).use(store).mount('#app')

    11.3Vuex的核心概念

    Vuex應用的核心是store,即倉庫。store實際上就是一個容器,它包含應用中大部分的狀態(state),與單純的全局對象不同,主要有兩點區別。

    1Vuex的狀態存儲是響應式的。也就是說,當Vue實例或組件從倉庫store中讀取狀態時,若store中狀態發生變化,那么相應的Vue實例或組件也會高效更新。

    2)用戶不能直接更新store中的狀態。更新的唯一途徑是顯式地提交mutation(類似于事件),以便跟蹤每一個狀態的變化。

    一個完整的store包含stategettersmutationsactionsmodules五大組成部分。

    11.3.1?Vuex中的state

    Vuex使用單一狀態樹,即使用一個對象包含了所有的應用層級狀態,作為一個唯一的數據源而存在。也就是說,每個應用將僅包含一個倉庫store實例。因此,需要狀態跟蹤(管理)的數據保存在Vuex選項的state選項內。

    1.在Vue?組件中通過computed計算屬性獲得?Vuex狀態

    $storestore的區別

    l??$store是掛載在Vue?實例上的(即Vue.prototype),而組件也是一個Vue實例。在組件中可使用this訪問原型上的屬性,template擁有組件實例的上下文,可直接通過{{$store.state?}}訪問,等價于script?中的this.$store.state

    l??store是掛載到Vue上,為Vue的根實例;store引入后被注入到Vue上,成為Vue的原型屬性,所以store是掛載到Vue上,為Vue的根實例;store引入后被注入到Vue上,成為Vue的原型屬性,所以在script中通過store.state$store.state都可以訪問。

    l??至于{{store.state}}script中的data需聲明過store才可以訪問。

    2.在Vue?組件中通過mapState()輔助函數獲得Vuex?狀態

    當一個組件需要獲取多個狀態時,將這些狀態都聲明為計算屬性會有些重復和冗余。為解決這個問題,Vuex通過使用?mapState()?輔助函數幫助生成計算屬性,減少按鍵次數。

    mapState()?輔助函數返回的是一個對象,用來獲取多個狀態。mapState()可以接收{}[]作為參數。

    {}參數為鍵值對形式參數,即key:valuekey為計算屬性,value為函數,參數為store.state,返回需要的state

      computed:?mapState({? ??// 箭頭函數可使代碼更簡練? ??count:?state?=>?state.count,? ??// 傳字符串參數 'count' 等同于 `state => state.count`? ??countAlias:?'count',? ??// 為了能夠使用 `this` 獲取局部狀態,必須使用常規函數? ??countPlusLocalState(state) {? ? ??return?state.count?+?this.localCount? ? }? })

      當映射的計算屬性名稱與state的子節點名稱相同時,可以為mapState()傳一個字符串數組參數。

      computed:?mapState([

      ??//?映射?this.count?為?store.state.count

      ??'count'? ?//可以有多個state對象中屬性,用逗號分隔

      ])

      3.對象展開運算符

        mapState()函數返回的是一個對象。如何將它與局部計算屬性混合使用呢?通常,首先需要使用一個工具函數將多個對象合并為一個,然后將最終對象傳給computed 屬性。但自從有了對象展開運算符(…),可以極大地簡化寫法。computed: {? localComputed () {?/* ... */?},??// 使用對象展開運算符將此對象混入到外部對象中? ...mapState({? ??// ...? })}

        app.vue

        app是從共享組件中讀取數據,這里有兩種方式,

        方法一

        this.$store.state.bookPress
        方法二
        ...mapState(['BISBN',?'bookPrice',?'bookAuthor']),注意這里的三個點的含義是打散的意思,我們看看下面的這個例子,.mapState數據賦值給變量S,然后在控制臺打印,發現是個鍵值對,key是組件state里面的對象key。
        let?s?=?mapState(['BISBN',?'bookPrice',?'bookAuthor'])

        ...mapState(['BISBN',?'bookPrice',?'bookAuthor']),最后就會變成

        BISBN:??mappedState()

        bookPrice:??mappedState()

        bookAuthor??mappedState()

          <template><div><h3>{{bookName}}</h3><h3>作者:{{$store.state.bookAuthor}}</h3><h3>出版社:{{$store.state.bookPress}}</h3><h3>ISBN:{{$store.state.BISBN}}</h3><h3>價格:{{$store.state.bookPrice}}</h3></div><hr/><div><h3>{{bookName}}</h3><h3>作者:{{bookAuthor}}</h3><h3>出版社:{{bookPress}}</h3><h3>ISBN:{{BISBN}}</h3><h3>價格:{{bookPrice}}</h3></div>
          </template>
          <script>
          import?{ mapState }?from?'vuex'
          export?default?{name:?'App',data() {//組件中的私有數據return?{bookName :?'Vue.js '}},//使用計算屬性獲取store中的狀態數據computed: {bookPress() {return?this.$store.state.bookPress},//使用對象展開運算符獲取store中的狀態數據...mapState(['BISBN',?'bookPrice',?'bookAuthor']),}
          }
          </script>
          <style>
          #app?{font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color:?#2c3e50;margin-top:?60px;
          }
          </style>

          index.js

            import { createStore }?from?'vuex'
            export default createStore
            ({ ?state: { BISBN :?'9787302598503', ??bookPrice :?99.8, ? ?bookAuthor :?'劉巍', ? ?bookPress :?'江西出版社'? },?mutations: { ?},?actions: { ?}, ?modules: { ?}})

            main.js

              import?{ createApp }?from?'vue'
              import?App?from?'./App.vue'
              import?store?from?'./store'
              createApp(App).use(store).mount('#app')

              11.3.2?Vuex中的getters

              在工程項目中,有時需要從?store.state?中派生出一些狀態,如對列表進行過濾并計數,可以通過計算屬性來實現,具體代碼如下。

                computed: {doneTodosCount () {return?this.$store.state.todos.filter(todo=> todo.done).length}
                }

                Vuex允許在store中定義“getters(可以認為是?store?的計算屬性)。getters可以接受state?作為其第一個參數,示例代碼如下。

                  const?store?=?createStore({state: {todos: [{?id:?1,?text:?'...',?done:?true?},{?id:?2,?text:?'...',?done:?false?}]},getters: {doneTodos?(state) {return?state.todos.filter(todo => todo.done)}} })

                  index.js

                    import?{ createStore }?from?'vuex'
                    export?default?createStore({state: {BISBN?:?'9787302598503',bookPrice :?99.8,bookAuthor :?'劉巍',bookPress :?'江西出版'},getters: {//接受 state 作為其第一個參數getBookPrice(state) {return?state.bookPrice},//接受其他 getters 作為第二個參數getThreeTimesBookPrice(state, getters) {return?state.bookPrice?+ getters.getBookPrice?*?2}},mutations: {},actions: {},modules: {}
                    })

                    getters程序流程圖:

                    ①在21行中用插值語法讀取計算屬性的值.

                    ②計算梳理有個方法mapGetters里面有數組,數組里面就是方法名,系統就會調用store下面的index.JS文件,getters是默認的語法關鍵字.

                    ③getters方法就是從數據源state中獲取數據,然后二次加工.

                    app.vue

                      <template><div><h3>{{bookName}}</h3><h3>作者:{{$store.state.bookAuthor}}</h3><h3>出版社:{{$store.state.bookPress}}</h3><h3>ISBN:{{$store.state.BISBN}}</h3><h3>價格:{{$store.state.bookPrice}}</h3></div><hr/><div><h3>{{bookName}}</h3><h3>作者:{{bookAuthor}}</h3><h3>出版社:{{bookPress}}</h3><h3>ISBN:{{BISBN}}</h3><h3>價格:{{bookPrice}}</h3></div><hr/><h3>getters訪問</h3><h3>一本書花的錢:{{$store.getters.getBookPrice}}</h3><h3>三本書花的錢:{{$store.getters.getThreeTimesBookPrice}}</h3><h3>一本書花的錢:{{getBookPrice}}</h3><h3>三本書花的錢:{{getThreeTimesBookPrice}}</h3>
                      </template>
                      <script>
                      import?{ mapState }?from?'vuex'
                      import?{ mapGetters }?from?'vuex'
                      export?default?{name:?'App',data() {//組件中的私有數據return?{bookName :?'Vue.js 3'}},//使用計算屬性獲取store中的狀態數據computed: {bookPress() {return?this.$store.state.bookPress},//使用對象展開運算符獲取store中的狀態數據...mapState(['BISBN',?'bookPrice',?'bookAuthor']),...mapGetters(['getBookPrice',?'getThreeTimesBookPrice'])//混入計算屬性}
                      }
                      </script>
                      <style>
                      #app?{font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color:?#2c3e50;margin-top:?60px;
                      }
                      </style>

                      main.js

                        import?{ createApp }?from?'vue'
                        import?App?from?'./App.vue'
                        import?store?from?'./store'
                        createApp(App).use(store).mount('#app')

                        11.3.3?Vuex中的mutations

                        更改?Vuex?的?store?中的狀態的唯一方法是提交?mutations。每個?mutation?都有一個字符串的事件類型?(type)和一個回調函數?(handler)。這個回調函數就是實際進行狀態更改的地方,并且它會接受?state?作為第一個參數。(其實簡單的理解就是state的數據不能直接修改,需要通過mutations里面的方法去修改數據源state的數據)

                        const?store =?createStore({state: {count: 1},mutations: {increment?(state) {??// increment為事件類型type,state為參數//?變更狀態state.count++}}})

                        不能直接調用一個?mutation?處理函數。這個選項更像是事件注冊:“當觸發一個類型為?increment?的?mutation?時,調用此函數。”要喚醒一個?mutation?處理函數,需要以相應的?type?調用?store.commit()方法。store.commit('increment')

                        11.3.4?Vuex中的actions

                        actions?類似于?mutations,不同在于以下兩點。

                        l??actions提交的是?mutations,而不是直接變更狀態。

                        l??actions可以包含任意異步操作。

                        actions中的方法需要使用store.dispatch()方法調用。action函數接受一個與?store?實例具有相同方法和屬性的?context?對象,因此可以調用?context.commit()?提交一個?mutation,或者通過?context.state?和?context.getters?來獲取?state?和?getters

                        一句話解釋:action就是異步請求,比如我調用一個接口,我不會等接口結果,就處理后面的代碼,等接口返回數據的時候,我重新渲染頁面。

                        app.vue

                        <template><div><h3>書名:{{bookName}}</h3><h3>出版社:{{$store.state.bookPress}}</h3><h3>作者:{{$store.state.bookAuthor}}</h3><h3>原價:{{bookPrice}}</h3></div><hr/><my-add></my-add><hr/><my-reduce></my-reduce>
                        </template>
                        <script>
                        import?{ mapState }?from?'vuex'
                        import?AddBookPrice?from?'./components/AddBookPrice.vue'
                        import?ReduceBookPrice?from?'./components/ReduceBookPrice.vue'
                        export?default?{name:?'App',computed: {...mapState(//混入計算屬性['bookName','bookPrice'])},components: {//定義子組件'my-add':?AddBookPrice,'my-reduce':?ReduceBookPrice}
                        }
                        </script>
                        <style>
                        #app?{font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color:?#2c3e50;margin-top:?60px;
                        }
                        </style>

                        index.js

                        import?{ createStore }?from?'vuex'
                        export?default?createStore({state: {BISBN?:?'9787302598503',bookPrice :?99.8,bookAuthor :?'劉巍',bookPress :?'江西出版社',bookName :?'Vue.js 3'},getts: {},mutations: {addBookBy10(state) {state.bookPrice?= state.bookPrice?+?10},addBookByNum(state, num) {state.bookPrice?= state.bookPrice?+ num},reduceBookBy10(state) {state.bookPrice?= state.bookPrice?-?10},reduceBookByNum(state, num) {state.bookPrice?= state.bookPrice?- num},},actions: {//同步增加addBookBy10Action(context) {//執行mutations中的addBookBy10context.commit('addBookBy10')},//同步減少,step為參數reduceBookByNumAction(context, step) {//執行mutations中的reduceBookByNumcontext.commit('reduceBookByNum', step)},//異步增加addBookBy10ActionAsync(context) {setInterval(() =>?{context.commit('addBookBy10')},?1000);},//異步減少,step為參數reduceBookByNumActionAsync(context, step) {setInterval(() =>?{context.commit('reduceBookByNum', step)},?1000);}},modules: {}
                        })

                        main.js

                        import?{ createApp }?from?'vue'
                        import?App?from?'./App.vue'
                        import?store?from?'./store'
                        createApp(App).use(store).mount('#app')

                        本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
                        如若轉載,請注明出處:http://www.pswp.cn/bicheng/75158.shtml
                        繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75158.shtml
                        英文地址,請注明出處:http://en.pswp.cn/bicheng/75158.shtml

                        如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

                        相關文章

                        【YOLOv11】目標檢測任務-實操過程

                        目錄 一、torch環境安裝1.1 創建虛擬環境1.2 啟動虛擬環境1.3 安裝pytorch1.4 驗證cuda是否可用 二、yolo模型推理2.1 下載yolo模型2.2 創建模型推理文件2.3 推理結果保存路徑 三、labelimg數據標注3.1 安裝labelimg3.2 解決浮點數報錯3.3 labelimg UI界面介紹3.4 數據標注案例…

                        探索 Vue 中的多語言切換:<lang-radio /> 組件詳解!!!

                        探索 Vue 中的多語言切換&#xff1a;<lang-radio /> 組件詳解 &#x1f30d; 嗨&#xff0c;大家好&#xff01;&#x1f44b; 今天我們來聊聊如何在 Vue 項目中實現一個優雅的多語言切換功能——<lang-radio /> 組件。這是一個小而美的組件&#xff0c;出現在登…

                        grafana 配置頁面告警

                        添加告警規則 1.登錄grafana 點擊 Alerting > Alert rules 點擊 New alert rule 2.填寫告警規則名字 3.配置告警規則 選擇數據源為 Loki 單機 Builder 單機Label brower 單機 node_name 標簽&#xff0c;選擇一個主機&#xff0c;選好后單機 Show logs 這時候查詢語…

                        關于JVM和OS中的棧幀的區別和內存淺析

                        關于JVM和OS中的棧幀的區別和內存淺析 剛看了黑馬JVM中的棧幀的講解&#xff0c;感覺和自己理解的棧幀有一定出入&#xff0c;查詢資料研究了一下發現的確有天壤之別&#xff0c;可惜黑馬并沒有講。 故寫下這篇文章鞏固一下, OS的棧幀&#xff1a; ? OS的棧幀會在調用一個函…

                        Python FastApi(7):請求體

                        1 多個參數 1.1 混合使用 Path、Query 和請求體參數 首先&#xff0c;毫無疑問地&#xff0c;你可以隨意地混合使用 Path、Query 和請求體參數聲明&#xff0c;FastAPI 會知道該如何處理。你還可以通過將默認值設置為 None 來將請求體參數聲明為可選參數&#xff1a; from ty…

                        告別枯燥工作,走向自動化

                        嘿&#xff0c;小伙伴們&#xff01;今天給你們介紹兩款超實用的RPA辦公自動化軟件&#xff0c;用它們&#xff0c;再也不用像機器一樣做重復勞動啦&#xff0c;超省時間&#xff01; 工具名稱&#xff1a;影刀RPA&#xff08;類似產品&#xff0c;八爪魚 RPA&#xff0c;操作上…

                        一種C# Winform的UI處理

                        效果 圓角 陰影 突出按鈕 說明 這是一種另類的處理&#xff0c;不是多層窗口 也不是WPF 。這種方式的特點是比較簡單&#xff0c;例如圓角、陰影、按鈕等特別容易修改過。其實就是html css DirectXForm。 在VS中如下 圓角和陰影 然后編輯這個窗體的Html模板&#xff0c…

                        HarmonyOS-ArkUI Navigation (導航組件)-第一部分

                        導航組件主要實現頁面間以及組件內部的界面跳轉&#xff0c;支持在不同的組件間進行參數的傳遞&#xff0c;提供靈活的跳轉棧操作&#xff0c;從而便捷的實現對不同頁面的訪問和復用。 我們之前學習過Tabs組件&#xff0c;這個組件里面也有支持跳轉的方式&#xff0c;Navigati…

                        華為開源自研AI框架昇思MindSpore應用案例:基于MindSpore框架實現PWCNet光流估計

                        如果你對MindSpore感興趣&#xff0c;可以關注昇思MindSpore社區 1 環境準備 1.進入ModelArts官網 云平臺幫助用戶快速創建和部署模型&#xff0c;管理全周期AI工作流&#xff0c;選擇下面的云平臺以開始使用昇思MindSpore&#xff0c;可以在昇思教程中進入ModelArts官網 創建…

                        虛幻基礎:UI

                        文章目錄 控件藍圖可以裝載其他控件藍圖可以安裝其他藍圖接口 填充&#xff1a;相對于父組件填充水平框尺寸—填充—0.5&#xff1a;改變填充的尺寸填充—0.5&#xff1a;改變與父組件的距離 錨點&#xff1a;相對于父組件的控件坐標系原點&#xff0c;屏幕比例改變時&#xff…

                        監控平臺——SkyWalking部署

                        一、環境準備 先下載SkyWalking安裝包&#xff0c;需要注意的是SkyWalking 版本在10.X以上使用的nacos-client是2.X&#xff0c;如果安裝的Nacos版本是1.X就會存在兼容性的問題。由于本人使用的SpringBoot項目是2.7.X版本&#xff0c;安裝的Nacos版本只能是1.X版本的&#xff…

                        熱門索尼S-Log3電影感氛圍旅拍LUTS調色預設 Christian Mate Grab - Sony S-Log3 Cinematic LUTs

                        熱門索尼S-Log3電影感氛圍旅拍LUTS調色預設 Christian Mate Grab – Sony S-Log3 Cinematic LUTs 我們最好的 Film Look S-Log3 LUT 的集合&#xff0c;適用于索尼無反光鏡相機。無論您是在戶外、室內、風景還是旅行電影中拍攝&#xff0c;這些 LUT 都經過優化&#xff0c;可為…

                        自動化工作流工具的綜合對比與推薦

                        最近收到很多朋友私信我說&#xff1a;“刷短視頻的時候&#xff0c;總是刷到自動化工作流的工具&#xff0c;有好多直播間都在宣傳&#xff0c;不知道哪款工具好”。我花了點時間&#xff0c;做了一下測試&#xff0c;大家可以參考一下&#xff0c;以下內容&#xff1a; 以下…

                        fircrawl本地部署

                        企業內部的網站作為知識庫給dify使用&#xff0c;使用fircrawl來爬蟲并且轉換為markdown。 ? git clone https://github.com/mendableai/firecrawl.gitcd ./firecrawl/apps/api/ cp .env.example .env cd ~/firecrawl docker compose up -d 官方&#xff1a; https://githu…

                        day17 學習筆記

                        文章目錄 前言一、數組的增刪改查1.resize函數2.append函數3.insert函數4.delete函數5.argwhere函數6.unique函數 二、統計函數1.amax&#xff0c;amin函數2.ptp函數3.median函數4.mean函數5.average函數6.var&#xff0c;std函數 前言 通過今天的學習&#xff0c;我掌握了num…

                        CentOS 8 Stream 配置在線yum源參考 —— 筑夢之路

                        CentOS 8 Stream ISO 文件下載地址&#xff1a;http://mirrors.aliyun.com/centos-vault/8-stream/isos/x86_64/CentOS-Stream-8-20240603.0-x86_64-dvd1.isoCentOS 8 Stream 網絡引導ISO 文件下載地址&#xff1a;http://mirrors.aliyun.com/centos-vault/8-stream/isos/x86_6…

                        網絡原理-TCP/IP

                        網絡原理學習筆記&#xff1a;TCP/IP 核心概念 本文是我在學習網絡原理時整理的筆記&#xff0c;主要涵蓋傳輸層、網絡層和數據鏈路層的核心協議和概念&#xff0c;特別是 TCP, UDP, IP, 和以太網。 一、傳輸層 (Transport Layer) 傳輸層負責提供端到端&#xff08;進程到進…

                        EF Core 執行原生SQL語句

                        文章目錄 前言一、執行查詢&#xff08;返回數據&#xff09;1&#xff09; 使用 FromSqlRaw或 FromSqlInterpolated 方法&#xff0c;適用于 DbSet<T>&#xff0c;返回實體集合。2&#xff09;結合 LINQ 查詢3&#xff09;執行任意原生SQL查詢語句&#xff08;使用ADO.N…

                        Unity LOD Group動態精度切換算法(基于視錐+運動速度)技術詳解

                        一、動態LOD技術背景與核心挑戰 1. 傳統LOD系統的局限 靜態閾值切換&#xff1a;僅基于距離的切換在動態場景中表現不佳 視覺突變&#xff1a;快速移動時LOD層級跳變明顯 性能浪費&#xff1a;靜態算法無法適應復雜場景變化 對惹&#xff0c;這里有一個游戲開發交流小組&…

                        MyBatis復雜查詢——一對一、一對多

                        目錄 &#xff08;一&#xff09;復雜查詢&#xff1a;1對1關系 【任務】數據庫里有學生表(student)和學生證信息表(student_card)&#xff0c;表結構如下所示&#xff0c;要求使用MyBatis框架查詢所有的學生信息以及每位學生的學生證信息 解決方案1&#xff1a;關聯查詢實現…