版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
12.1商品訂單數(shù)據(jù)模型12.2一對一查詢12.3一對多查詢12.4多對多查詢12.5延遲加載12.1商品訂單數(shù)據(jù)模型商品訂單數(shù)據(jù)模型,包括訂單表、訂單明細表、用戶表、商品信息表等,具體如下:訂單表(orders):記錄用戶創(chuàng)建的訂單,字段有user_id(外鍵)、訂單id、創(chuàng)建時間、訂單狀態(tài)等。訂單明細表(orderdetail):記錄用戶購買信息,字段有訂單id(外鍵)、商品id(外鍵)、商品數(shù)量、商品購買價格等。用戶表(user):記錄購買商品的用戶信息,字段有user_id(唯一標識一個用戶)、用戶名、聯(lián)系電話等。商品信息表(items):記錄所有商品信息,字段有商品id(主鍵)、商品名稱、商品介紹、商品價格等。12.2一對一查詢12.2.1方法一:使用resultType使用resultType定義訂單信息po類。該po類中包括了訂單信息和用戶信息。(1)sql語句:SELECTorders.*,user.username,userss.addressFROMorders,userWHEREorders.user_id=user.id(2)定義po類。po類中應該包括上邊sql查詢出來的所有字段,代碼如下:publicclassOrdersCustomextendsOrders{privateStringusername;//用戶名稱privateStringaddress;//用戶地址get/set...OrdersCustom類繼承Orders類后,OrdersCustom類中包括了Orders類的所有字段,因此只需要定義用戶的信息字段。(3)Mapper.xml:<!--查詢所有訂單信息--><selectid="findOrdersList"resultType="cn.itcast.mybatis.po.OrdersCustom">SELECTorders.*,user.username,user.addressFROMorders, userWHEREorders.user_id=user.id</select>(4)Mapper接口:publicList<OrdersCustom>findOrdersList()throwsException;(5)測試:PublicvoidtestfindOrdersList()throwsException{//獲取sessionSqlSessionsession=sqlSessionFactory.openSession();//獲取Mapper接口實例UserMapperuserMapper=session.getMapper(UserMapper.class);//查詢訂單信息List<OrdersCustom>list=userMapper.findOrdersList();System.out.println(list);//關閉sessionsession.close();}(6)總結:定義專門的po類作為輸出類型,其中定義了sql查詢結果集所有的字段。此方法較為簡單,企業(yè)中使用普遍。12.2.2方法二:使用resultMap使用resultMap定義專門的resultMap用于映射一對一查詢結果。(1)sql語句:SELECTorders.*,user.username,user.addressFROMorders,userWHEREorders.user_id=user.id(2)定義po類。在Orders類中加入user屬性,user屬性中用于存儲關聯(lián)查詢的用戶信息,因為訂單關聯(lián)查詢用戶是一對一關系,所以這里使用單個user對象存儲關聯(lián)查詢的用戶信息。(3)Mapper.xml:<selectid="findOrdersListResultMap"resultMap="userordermap">SELECTorders.*,user.username,user.addressFROMorders,userWHEREorders.user_id=user.id</select>這里resultMap指定userordermap。(4)定義resultMap。需要關聯(lián)查詢映射的是用戶信息,使用association將用戶信息映射到訂單對象的用戶屬性中。<!--訂單信息resultmap--><resultMaptype="cn.itcast.mybatis.po.Orders"id="userordermap"><!--這里的id,是MyBatis在進行一對一查詢時將user字段映射為user對象時要使用,必須寫--><idproperty="id"column="id"/><resultproperty="user_id"column="user_id"/><resultproperty="number"column="number"/><associationproperty="user"javaType="cn.itcast.mybatis.po.User"><!--這里的id為user的id,如果寫上表示給user的id屬性賦值--><idproperty="id"column="user_id"/><resultproperty="username"column="username"/><resultproperty="address"column="address"/></association></resultMap>association:關聯(lián)查詢單條記錄。property:關聯(lián)查詢的結果存儲在cn.itcast.mybatis.po.Orders的user屬性中。javaType:關聯(lián)查詢的結果類型。<idproperty="id"column="user_id"/>:查詢結果的user_id列對應關聯(lián)對象的id屬性,這里是<id/>表示user_id是關聯(lián)查詢對象的唯一標識。<resultproperty="username"column="username"/>:查詢結果的username列對應關聯(lián)對象的username屬性。(5)Mapper接口:publicList<Orders>findOrdersListResultMap()throwsException;(6)測試:PublicvoidtestfindOrdersListResultMap()throwsException{//獲取sessionSqlSessionsession=sqlSessionFactory.openSession();//獲取mapper接口實例UserMapperuserMapper=session.getMapper(UserMapper.class);//查詢訂單信息List<Orders>list=userMapper.findOrdersList2();System.out.println(list);//關閉sessionsession.close();}(7)小結:使用association完成關聯(lián)查詢,將關聯(lián)查詢信息映射到pojo對象中。12.3一對多查詢案例:查詢所有訂單信息及訂單下的訂單明細信息。訂單信息與訂單明細為一對多關系。使用resultMap實現(xiàn)。(1)sql語句:SELECTorders.*,user.username,user.address,orderdetail.idorderdetail_id,orderdetail.items_id,orderdetail.items_numFROMorders,user,orderdetailWHEREorders.user_id=user.idANDorders.id=orderdetail.orders_id(2)定義po類。在Orders類中加入user屬性。在Orders類中加入List<Orderdetail>orderdetails屬性。(3)Mapper.xml:<selectid="findOrdersDetailList"resultMap="userorderdetailmap">SELECTorders.*,user.username,user.address,orderdetail.idorderdetail_id,orderdetail.items_id,orderdetail.items_numFROMorders,user,orderdetailWHEREorders.user_id=user.idANDorders.id=orderdetail.orders_id</select>(4)定義resultMap。<!--訂單信息resultmap--><resultMaptype="cn.itcast.mybatis.po.Orders"id="userorderdetailmap"><idproperty="id"column="id"/><resultproperty="user_id"column="user_id"/><resultproperty="number"column="number"/><associationproperty="user"javaType="cn.itcast.mybatis.po.User"><idproperty="id"column="user_id"/><resultproperty="username"column="username"/><resultproperty="address"column="address"/></association><collectionproperty="orderdetails"ofType="cn.itcast.mybatis.po.Orderdetail"><idproperty="id"column="orderdetail_id"/><resultproperty="items_id"column="items_id"/><resultproperty="items_num"column="items_num"/></collection></resultMap>collection:關聯(lián)查詢結果集,定義查詢訂單明細信息。property="orderdetails":關聯(lián)查詢的結果集存儲在cn.itcast.mybatis.po.Orders的哪個屬性中。ofType="cn.itcast.mybatis.po.Orderdetail":指定關聯(lián)查詢的結果集中的對象類型,即list中的對象類型。<id/>及<result/>的意義同“一對一查詢”。resultMap使用繼承。上述代碼的resultmap定義與“一對一查詢”相同,這里使用繼承可以不再填寫重復的內(nèi)容,其他如下:<resultMaptype="cn.itcast.mybatis.po.Orders"id="userorderdetailmap"extends="userordermap"><collectionproperty="orderdetails"ofType="cn.itcast.mybatis.po.Orderdetail"><idproperty="id"column="orderdetail_id"/><resultproperty="items_id"column="items_id"/><resultproperty="items_num"column="items_num"/></collection></resultMap>使用extends繼承訂單信息userordermap。(5)Mapper接口:publicList<Orders>findOrdersDetailList()throwsException;(6)測試:PublicvoidtestfindOrdersDetailList()throwsException{//獲取sessionSqlSessionsession=sqlSessionFactory.openSession();//獲取Mapper接口實例UserMapperuserMapper=session.getMapper(UserMapper.class);//查詢訂單信息List<Orders>list=userMapper.findOrdersDetailList();System.out.println(list);//關閉sessionsession.close();}(7)小結:使用collection完成關聯(lián)查詢,將關聯(lián)查詢信息映射到集合對象。12.4多對多查詢案例:查詢用戶購買的商品信息。(1)sql。需要查詢所有用戶信息,關聯(lián)查詢訂單及訂單明細信息,訂單明細信息中關聯(lián)查詢商品信息。SELECTorders.*,USER.username,USER.address,orderdetail.idorderdetail_id,orderdetail.items_id,orderdetail.items_num,items_name,items.detailitems_detailFROMorders,USER,orderdetail,itemsWHEREorders.user_id=USER.idANDorders.id=orderdetail.orders_idANDorderdetail.items_id=items.id(2)po定義。在user中添加List<Orders>orders屬性,在Orders類中加入List<Orderdetail>orderdetails屬性。(3)resultMap。需要關聯(lián)查詢映射的信息是:訂單、訂單明細、商品信息。訂單:一個用戶對應多個訂單,使用collection映射到用戶對象的訂單列表屬性中。訂單明細:一個訂單對應多個明細,使用collection映射到訂單對象中的明細屬性中。商品信息:一個訂單明細對應一個商品,使用association映射到訂單明細對象的商品屬性中。<!--一對多查詢 查詢用戶信息、關聯(lián)查詢訂單、訂單明細信息、商品信息 --> <resultMaptype="cn.itcast.mybatis.po.User"id="userOrderListResultMap"> <idcolumn="user_id"property="id"/> <resultcolumn="username"property="username"/> <collectionproperty="orders"ofType="cn.itcast.mybatis.po.Orders"> <idcolumn="id"property="id"/> <resultproperty="number"column="number"/> <collectionproperty="orderdetails"ofType="cn.itcast.mybatis.po.Orderdetail"> <idcolumn="orderdetail_id"property="id"/>
<resultproperty="ordersId"column="id"/> <resultproperty="itemsId"column="items_id"/> <resultproperty="itemsNum"column="items_num"/> <associationproperty="items"javaType="cn.itcast.mybatis.po.Items"> <idcolumn="items_id"property="id"/> <resultcolumn="items_name"property="name"/> <resultcolumn="items_detail"property="detail"/> </association> </collection> </collection></resultMap>(4)小結。一對多是多對多的特例,如下需求:查詢用戶購買的商品信息,用戶和商品的關系是多對多關系。需求1:查詢字段:用戶賬號、用戶名稱、用戶性別、商品名稱、商品價格(最常見)企業(yè)開發(fā)中常見明細列表,用戶購買商品明細列表使用resultType將上邊查詢列映射到POJO輸出。需求2:查詢字段:用戶賬號、用戶名稱、購買商品數(shù)量、商品明細(鼠標移上顯示明細)使用resultMap將用戶購買的商品明細列表映射到user對象中。12.5延遲加載12.5.1打開延遲加載開關在MyBatis核心配置文件中有兩個配置:lazyLoadingEnabled、aggressiveLazyLoading,其設置如表12-1所示。12.5.2一對一查詢延遲加載(1)需求:查詢訂單信息,關聯(lián)查詢用戶信息。默認只查詢訂單信息,當需要查詢用戶信息時再去查詢用戶信息。(2)sql語句:SELECTorders.*FROMorders(3)定義po類。在Orders類中加入user屬性。(4)Mapper.xml:<selectid="findOrdersList3"resultMap="userordermap2">SELECTorders.*FROMorders</select>(5)定義resultMap。<!--訂單信息resultmap--><resultMaptype="cn.itcast.mybatis.po.Orders"id="userordermap2"><idproperty="id"column="id"/><resultproperty="user_id"column="user_id"/><resultproperty="number"column="number"/><associationproperty="user"javaType="cn.itcast.mybatis.po.User"select="findUserById"column
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 獨立董事2025年度履職評價與激勵措施合同3篇
- 二零二五年度禾青幼兒園教玩具采購與幼兒園設施維護合同3篇
- 二零二五搬家公司合同模板:搬家保險責任與賠償條款2篇
- 二零二五版物流行業(yè)預付款擔保合同2篇
- 二零二五版搬家服務與家政服務融合合同樣本2篇
- 二零二五年度蔬菜電子商務合同:線上銷售平臺與賣家之間的規(guī)則2篇
- 二零二五版汽車零部件購銷合同標準及售后服務模板3篇
- 二零二五年度國際教育機構合作辦學合同3篇
- 二零二五年度高壓變壓器安裝及安全防護技術合同3篇
- 二零二五版社保繳納與工傷保險待遇保障合同3篇
- ICU常見藥物課件
- CNAS實驗室評審不符合項整改報告
- 農(nóng)民工考勤表(模板)
- 承臺混凝土施工技術交底
- 臥床患者更換床單-軸線翻身
- 計量基礎知識培訓教材201309
- 中考英語 短文填詞、選詞填空練習
- 一汽集團及各合資公司組織架構
- 阿特拉斯基本擰緊技術ppt課件
- 初一至初三數(shù)學全部知識點
- 新課程理念下的班主任工作藝術
評論
0/150
提交評論