Mybatis處理表關聯(懶加載)

1.關系型數據庫?

??數據庫中的表對象之間是有關系的。

??一對一,一對多,多對多。

??ORM映射。數據庫表映射到實體對象。

?????????????實體與實體之間是有關系的。

?一對多的關系。

?比如商品分類表與商品表之間的關系,就是一對多的關系。

?????入庫主表與入庫子表之間的關系,也是一對多的關系。

?????出庫主表與出庫子表之間的關系,也是一對多的關系。

ID編號 ?教師編號 ??課程編號 ??其余字段 ?(外鍵的都是多的關系)

1 ???????001

2 ???????001

很明顯的就是在多的這個表里會出現1的這個表里的字段。

?

?

2.如果我們獲取的時候,只想獲取單表的數據:

?

?盡可能不用關聯查詢的時候就不用。

?

延遲加載,也叫懶加載,比如我們取商品信息表的數據,只會從商品信息表里去獲取,如果發現我們除了取商品信息表的數據的時候,還會取商品分類表的數據,那么這個時候才會去查詢商品分類表的數據。

?

實現延遲加載的步驟:

?

1),首先需要配置mybatis中使用延遲加載:

?

?

?

<!-- lazyLoadingEnabled設置為懶加載--><setting name="lazyLoadingEnabled" value="true"/><!-- aggressiveLazyLoading主動加載設置為false --><setting name="aggressiveLazyLoading" value="false"/>

?

?

?

2)需要配置jar包,cglib的jar包。

?

?

?

<!-- mybatis懶加載需要引入的jar包,cglib包 --><dependency><groupId>cglib</groupId><artifactId>cglib-nodep</artifactId><version>3.1</version></dependency>

?

3.實體與實體之間的關系設定。

設計思路,在產品實體類中會有一個產品分類的實體對象。

??在分類的實體對象中會有一個產品表的集合對象數據。

比如產品表,那么會有一個產品分類的實體對象:

public class GoodsInfo implements Serializable{private Integer goodsid;private Integer goodstypeid;//外鍵private Integer companyid;private Integer unitid;private String createuser;private String updateuser;private String commdityid;private String commdityname;private String describeit;private String createtime;private String updatetime;private String remark;private String ifdelete;//會有一個外鍵的實體對象數據private GoodsType goodsType;
}

映射的配置(配置在實體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.jinglin.hotelsup.dao.imp.GoodsInfoMapper">
<!-- type是告訴將要映射的實體類,id就是標記名 -->
<!-- 實現懶加載的結果集(延遲加載) -->
<resultMap type="GoodsInfo" id="goodsInfoLazyResultMap"><!-- column表示的是數據庫的列名,property是對應的屬性名 --><id column="goodsid" property="goodsid"/><!--result表示數據庫的字段和對象的字段的映射,column表示列名,property表示的是對象的屬性名 --><result column="goodstypeid" property="goodstypeid"></result><result column="companyid " property="companyid "></result><result column="unitid" property="unitid"></result><result column="createuser" property="createuser"></result><result column="updateuser" property="updateuser"></result><result column="commdityid" property="commdityid"></result><result column="commdityname" property="commdityname"></result><result column="describeit" property="describeit"></result><result column="createtime" property="createtime"></result><result column="updatetime" property="updatetime"></result><result column="remark" property="remark"></result><result column="ifdelete" property="ifdelete"></result><!--關聯另外一個實體對象 --><association  property="goodsType" select="getgoodstypeone"column="goodstypeid"></association>
</resultMap>
<select id="selectOne" resultMap="goodsInfoLazyResultMap" parameterType="java.lang.Integer">select * from goodsinfo where goodsid=#{goodsid}
</select>
<select id="getgoodstypeone" resultType="GoodsType" parameterType="java.lang.Integer">select * from goodstype where goodstypeid=#{goodstypeid}
</select>
</mapper>

2)對于產品分類表,那么會對應到多個產品,實際就是在產品分類表里會有產品的集合:

public class GoodsType implements Serializable {private Integer goodstypeid;private String goodstypename;private String ifdel;//分類表里會出現多的產品的集合private List<GoodsInfo> listgoods;public List<GoodsInfo> getListgoods() {return listgoods;}public void setListgoods(List<GoodsInfo> listgoods) {this.listgoods = listgoods;}public Integer getGoodstypeid() {return goodstypeid;}public void setGoodstypeid(Integer goodstypeid) {this.goodstypeid = goodstypeid;}public String getGoodstypename() {return goodstypename;}public void setGoodstypename(String goodstypename) {this.goodstypename = goodstypename;}public String getIfdel() {return ifdel;}public void setIfdel(String ifdel) {this.ifdel = ifdel;}}

那么對應的映射結果集(配置在對應產品類型的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.jinglin.hotelsup.dao.imp.GoodsTypeMapper"><!-- 配置延遲加載的映射結果集 --><resultMap type="GoodsType" id="goodsTypeLazyResultMap"><!-- 配置主鍵 --><id column="goodstypeid" property="goodstypeid"></id><result column="goodstypename" property="goodstypename"></result><result column="ifdel" property="ifdel"></result><!-- 配置集合 --><collection select="selectgoods" property="listgoods" column="goodstypeid"></collection></resultMap><select id="selectOne" resultMap="goodsTypeLazyResultMap" parameterType="java.lang.Integer">select * from goodstype where ifdel='N' and goodstypeid=#{goodstypeid}</select><select id="selectgoods" resultMap="com.jinglin.hotelsup.dao.imp.GoodsInfoMapper.goodsInfoLazyResultMap" parameterType="java.lang.Integer">select * from goodsinfo where goodstypeid=#{goodstypeid}</select></mapper>

?

轉載于:https://www.cnblogs.com/ljljava/p/7440725.html

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

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

相關文章

Spring–設計領域模型和服務層

我們將為時間表管理構建應用程序。 因此&#xff0c;讓我們首先考慮一些用例和實體。 讓我用幾個項目符號寫它們&#xff1a; 任務由經理分配給員工。 一項任務可以分配給許多員工。 員工將他在某些任務上工作的小時數填滿至系統。 經理/員工查看時間表上的報告&#xff08;時…

如何把很多照片拼成一張照片_一張現場照片引發的中韓之爭

來源&#xff1a;渤海新水手聊船專欄前幾天&#xff0c;微信群里(造船質量技術高級交流群)一位網友發了一張韓國船廠的現場照片&#xff0c;沒想到瞬間引發全群幾十位網友的熱烈討論&#xff0c;中韓之爭就此上演&#xff01;照片反映出的是國內船廠很難做到的部分——分段預裝…

計算機文檔設置,電腦這樣設置快速的共享文件、分享文檔!

原標題&#xff1a;電腦這樣設置快速的共享文件、分享文檔&#xff01;在日常辦公的時候&#xff0c;有時需要共同使用一些文件或者文檔或者一些視頻資料。那么要怎么方便的使用這些共同的資源呢&#xff1f;當然這時大家可能會說可以用QQ、微信傳給對方不就可以了。但是如果文…

關于vue 框架與后臺框架的混合使用的嘗試

這幾天我在研究前臺框架和后臺框架融合的問題,進行了一些嘗試; 我前臺選擇的是 vue,當然也可以選擇 react 等其他 mvvm 框架,不過 vue 對于我來說是最熟悉的; 后臺話,我選擇的是 php 的 lumen 框架,他是laravel 的簡化版,因為比較輕量,所以這也是我的選擇; 先說下我這邊的環境:…

GitHub上整理的一些工具

GitHub上整理的一些工具 GitHub 2015-11-19 10:10:47 發布您的評價: 0.0 收藏 5收藏技術站點 Hacker News&#xff1a;非常棒的針對編程的鏈接聚合網站Programming reddit&#xff1a;同上MSDN&#xff1a;微軟相關的官方技術集中地&#xff0c;主要是文檔類infoq&#x…

服務器 raid 1t硬盤嗎,用了4塊1T的硬盤,做了raid5,顯示有2.7T,但是分區做完系統后,有700多G不能動...

滿意答案ouourpt892013.11.14采納率&#xff1a;46% 等級&#xff1a;12已幫助&#xff1a;13583人出現這種情況是由于創建的硬盤使用的是基本磁盤(MBR)格式&#xff0c;因受MBR磁盤格式技術的限制&#xff0c;MBR磁盤只支持2TB的磁盤容量&#xff0c;所以出現了你所說的情況…

如何編寫更好的POJO服務

在Java中&#xff0c;您可以輕松地在Plain Old Java Object&#xff08;POJO&#xff09;類中實現一些業務邏輯&#xff0c;并且可以在高級服務器或框架中輕松運行它們。 有許多服務器/框架&#xff0c;例如JBossAS&#xff0c;Spring或Camel等&#xff0c;它們使您可以部署POJ…

mongo 唯一約束索引_快速掌握mongoDB(三)——mongoDB的索引詳解

1 mongoDB索引的管理本節介紹mongoDB中的索引&#xff0c;熟悉mysql/sqlserver等關系型數據庫的小伙伴應該都知道索引對優化數據查詢的重要性。我們先簡單了解一下索引&#xff1a;索引的本質就是一個排序的列表&#xff0c;在這個列表中存儲著索引的值和包含這個值的數據(數據…

HBase MapReduce

1. HBase to HBase Mapper 繼承 TableMapper&#xff0c;輸入為Rowkey和Result. public abstract class TableMapper<KEYOUT, VALUEOUT> extends Mapper<ImmutableBytesWritable, Result, KEYOUT, VALUEOUT> { public TableMapper() { }} package com.scb.ja…

第六期的知識點

1.volatile詳解 在應用程序中&#xff0c;volatile主要是被設計用來修飾被不同線程訪問和修改的變量 .volatile的本意是“易變的” 因為訪問寄存器要比訪問內存單元快的多,所以編譯器一般都會作減少存取內存的優化&#xff0c;但有可能會讀臟數據。當要求使用volatile聲明變量值…

在DelayQueue中更改延遲,從而更改順序

因此&#xff0c;我正在研究構建一個簡單的對象緩存&#xff0c;該緩存在給定時間后會使對象過期。 顯而易見的機制是使用Java并發包中的DelayedQueue類。 但我想知道是否有可能在將對象添加到隊列后更新延遲。 看一下Delayed接口&#xff0c;似乎沒有充分的理由不在文檔中&…

vi編輯器服務器維護,vi編輯器有哪幾種工作模式及如何轉換_網站服務器運行維護,vi編輯器,工作模式...

整理分享一些 Linux思維導圖(值得收藏)_網站服務器運行維護本篇文章整理分享了一些 Linux思維導圖(值得收藏)。有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對大家有所幫助。vi編輯器有三種基本的工作模式&#xff0c;分別是&#xff1a;指令行模式、…

(八)cmockery中的calculator和run_tests函數的注釋代碼

所分析的calculator.c和calculator_test.c文件位于 工程中的 cmockery/src/example/ 目錄下&#xff0c;是一個相對而言比較全面的樣例程序&#xff0c;用到了cmockery項目中的大多數單元測試方法。基本上涵蓋了之前所有的樣例程序中的用法&#xff0c;還有兩組測試是database操…

家用雙wan口路由器推薦_請推薦雙WAN口的有線千兆硬路由器?

利益相關&#xff1a;TP-LINK一線銷售人員(來看看會不會有推薦我司產品的2333 )路由器&#xff1a;TL-ER3220G&#xff0c;帶機量300終端&#xff0c;可管理50個AP&#xff0c;最大支持四條寬帶接入POE交換機&#xff1a;TL-SF1005P(5口百兆) TL-SG1005P(5口千兆) TL-SF1009PH(…

第一章魔獸窗口

開始顯示第一個窗體 用戶直接點登陸的話就會提示用戶名不能為空密碼不能為空 沒有賬號的話只能先注冊&#xff0c;點擊藍色摁鈕進入下一個窗體 這里有判斷是否為空&#xff0c;注冊成功后利用窗體傳值&#xff0c;并且打開第一個窗口 把注冊的用戶名和密碼寫上去就可以的登陸到…

Apache Digester示例–輕松配置

解決問題–硬編碼&#xff0c;需要為您的應用程序創建自定義配置&#xff0c;例如struts配置文件&#xff0c;以僅通過更改文件來改變應用程序行為。 Apache Digester可以輕松為您完成此任務。 使用Apache Digester相當容易將XML文檔轉換為相應的Java bean對象層次結構。 請參閱…

騰訊云搭svn服務器,騰訊云使用筆記二: 安裝svn服務器及web同步

A01&#xff1a;安裝subversionsudo apt-get install subversionA02:創建倉庫很多目錄可以放subversion文件倉庫&#xff0c;最常見的是/usr/local/svn和/home/svnsudo mkdir -p /home/svn/youshengyousesudo svnadmin create /home/svn/youshengyouse//說明&#xff1a;先創建…

python將圖像轉換為8位單通道_使用Python將圖片轉換為單通道黑白圖片

本文介紹如何使用python將圖片轉換為純黑白的單通道圖片。文中用到的腳本支持彩色、灰度、帶alpha通道的輸入圖片以及SVG矢量圖&#xff0c;支持調整輸出圖片大小以及設置灰度閾值。最后介紹如何輸出SSD1306 OLED顯示屏可用的XBM文件&#xff0c;并利用輸出的XBM數據在0.96寸的…

Java FlameGraph 火焰圖

上周一個偶然的機會聽同事提到了Java FlameGraph&#xff0c;剛實驗了一下&#xff0c;效果非常好。 一、什么是FlameGraph 直接看圖說話。FlameGraph 是 SVG格式&#xff0c;矢量圖&#xff0c;可以隨意擴大縮小&#xff0c;看不清的信息可以放大看。圖中&#xff0c;各種紅橙…

ADB 常用命令

獲取Android設備號 adb shell getprop ro.serialno 獲取系統版本 adb shell getprop ro.build.version.release>4.2.2 獲取系統api版本 adb shell getprop ro.build.version.sdk>17 獲取設備分辨率&#xff08;SDK4.3&#xff09; adb shell wm size獲取設備屏幕密度&am…