段建國(guó)-課件mybatis教案chapter_第1頁(yè)
段建國(guó)-課件mybatis教案chapter_第2頁(yè)
段建國(guó)-課件mybatis教案chapter_第3頁(yè)
段建國(guó)-課件mybatis教案chapter_第4頁(yè)
段建國(guó)-課件mybatis教案chapter_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Chapter4多表操作*課程回顧*1MyBateis配置文件2文件詳解3動(dòng)態(tài) SQL 使用*教學(xué)導(dǎo)航*1一對(duì)一關(guān)系2一對(duì)一方法二3一對(duì)多關(guān)系前面章節(jié)用 mybatis 能對(duì)單表進(jìn)行增刪改查操作了,也能用動(dòng)態(tài) SQL 書寫比較復(fù)雜的 sql 語(yǔ)句。但是在實(shí)際開(kāi)發(fā)中,做項(xiàng)目不可能只是單表操作,往往會(huì)涉及到多之間的關(guān)聯(lián)操作。那么如何用 mybatis 處理多表之間的關(guān)聯(lián)操作呢?一、一對(duì)一關(guān)聯(lián)操作查詢所有訂單信息,關(guān)聯(lián)查詢下單用戶信息。注意:因?yàn)橐粋€(gè)訂單信息只會(huì)是一個(gè)人下的訂單,所以從查詢訂單信息出發(fā)關(guān)聯(lián)查詢用戶信息為一對(duì)一查詢。如果從用戶信息出發(fā)查詢用戶下的訂單信息則為一對(duì)多查詢,因?yàn)橐粋€(gè)用戶可以

2、下多個(gè)訂單。使用 resultType,定義訂單信息 po 類,此 po 類中包括了訂單信息和用戶信息:建表語(yǔ)句見(jiàn) mybatis.sql 文件。創(chuàng)建 javaWeb 工程項(xiàng)目 MyBatisFour(省略,參見(jiàn)示例 one 包部分) 1、Sql 語(yǔ)句準(zhǔn)備:SELECTo.*, u.username, u.addressFROMmy_orders o,user u WHERE o.user_id = u.id and=?2、創(chuàng)建 perties在類目錄 src 下面(參見(jiàn)前面章節(jié))3、定義 pojo:User.java(參見(jiàn) MyBatisTwo 項(xiàng)目)Order.javar

3、esultType Po 類中應(yīng)該包括上邊 sql 查詢出來(lái)的所有字段,如下:注意:OrdersCustom 類繼承 Orders 類后 OrdersCustom 類包括了 Orders 類的所有字段,只需要定義用戶的信息字段即可。4、編寫 Mapper 接口 UserMapper.javapublicerface UaweMapper public List findOrdersList(orderID) throws Exception;public class OrdersCustom extends Order private String username;/ 用戶名稱 privat

4、e String address;/ 用戶地址.省略相應(yīng)get and set 方法public class Order privateeger id; privateeger userId; private String number; private Date createtime; private String note;.省略相應(yīng)get and set 方法文件 UserMapper.xml5、MyBatis配置文件加載 Mapper 接口6、編寫測(cè)試類及方法OrdersTest 類:public class OrdersTest /會(huì)話工廠private SqlSesFactory

5、sqlSesFactory;/* junit 測(cè)試中方法調(diào)用時(shí),在執(zhí)行之前初始化方法*/ Beforepublic void init() throws IOExceptionSELECTo.*,u.username,u.address FROM My_orders o, user u WHERE o.user_id = u.id and=#id/定義mybatis 全局配置文件String resource = SqlMapConfig.xml;/加載 mybatis 全局配置文件InputStreaminputStream=Resour.getResourceAsStream(resour

6、ce);/構(gòu)建sqlSes的工廠sqlSesFactory=newSqlSesFactoryBuilder().build(inputStream);Testpublic void queryByAll() List list = null;SqlSessqlSes= null;try / 創(chuàng)建數(shù)據(jù)庫(kù)會(huì)話實(shí)例sqlSessqlSes= sqlSesFactory.openSes();/獲限mapper 接口實(shí)例UserMapperuserMapper=sqlSes.getMapper(UserMapper.class);/查詢訂單信息list = userMapper.findOrdersLi

7、st(3);for (OrdersCustom ordersCustom : list) System.out.prln(ordersCustom.getUsername();catch (Exception e) e.prStackTrace();finally 執(zhí)行方法觀察結(jié)果定義專門的 po 類作為輸出類型,其中定義了 sql 查詢結(jié)果集所有的字段。此方法較為簡(jiǎn)單,企業(yè)中使用普遍。二、一對(duì)一方法二使用 resultMap,定義專門的 resultMap 用于一對(duì)一查詢結(jié)果。在 javaWeb 工程項(xiàng)目 MyBatisFour(增加 two package 包部分)1、Sql 語(yǔ)句準(zhǔn)備:S

8、ELECT .id,o.user_id,o.number,o.createtime,o.note,u.username,u.addressFROM My_orders o JOIN user u ON u.id = o.user_id2、定義 pojo:User.java(參見(jiàn)本章上例)在 Order 類中加入 User 屬性,user 屬性中用于關(guān)聯(lián)查詢的用戶信息,因?yàn)橛唵侮P(guān)聯(lián)查詢用戶是一對(duì)一關(guān)系,所以這里使用單個(gè) User 對(duì)象息。關(guān)聯(lián)查詢的用戶信Order.javapublic class Order privateeger id; privateeger userId; private

9、 String number; private Date createtime;private String note;if (sqlSes!= null) sqlSes.close();3、編寫 Mapper 接口 UserMapper.java文件 UserMapper.xmlpublicerface UserMapper public List findOrdersList() throws Exception;private User user;.省略 get and set 方法這里 resultMap 指定 orderUserResultMapassotion:表示進(jìn)行關(guān)聯(lián)查詢單條

10、property:表示關(guān)聯(lián)查詢的結(jié)果user 屬性中在 com.java.mybatis.tow.beans.Orders 的javaType:表示關(guān)聯(lián)查詢的結(jié)果類型:查詢結(jié)果的 id 列對(duì)應(yīng)關(guān)聯(lián)對(duì)象的 id 屬性,這里是表示 id 是關(guān)聯(lián)查詢對(duì)象的唯一標(biāo)識(shí)。:查詢結(jié)果的 username 列對(duì)應(yīng)關(guān)聯(lián)對(duì)象的 username 屬性。4、MyBatis配置文件加載 Mapper 接口5、編寫測(cè)試類及方法OrdersTest 類: SELECTo.id,o.user_id,o.number,o.createtime,o.note,u.username,u.address FROM My_order

11、s o JOIN user u ON u.id = o.user_idpublic class OrdersTest /會(huì)話工廠private SqlSes/*Factory sqlSesFactory;* junit 測(cè)試中方法調(diào)用時(shí),在執(zhí)行之前初始化方法*/ Beforepublic void init() throws IOException/定義mybatis 全局配置文件String resource = SqlMapConfig.xml;/加載 mybatis 全局配置文件InputStream inputStream = Resour.getResourceAsStream(re

12、source);/構(gòu)建sqlSes的工廠sqlSesFactory=newSqlSesFactoryBuilder().build(inputStream);Testpublic void queryByAll() List list = null;SqlSestry sqlSes= null;/ 創(chuàng)建數(shù)據(jù)庫(kù)會(huì)話實(shí)例sqlSessqlSes= sqlSesFactory.openSes();/獲限mapper 接口實(shí)例UserMapper userMapper = sqlSes/查詢訂單信息.getMapper(UserMapper.class);list = userMapper.findO

13、rdersList();for (Order ordersCustom : list) System.out.prln(ordersCustom.getUser().getUsername();觀察運(yùn)行結(jié)果:三、一對(duì)多關(guān)聯(lián)查詢所有用戶信息及用戶關(guān)聯(lián)的訂單信息,用戶信息和訂單信息為一對(duì)多關(guān)系。使用 resultMap 實(shí)現(xiàn)進(jìn)行介紹:在 javaWeb 工程項(xiàng)目 MyBatisFour(增加 three package 包部分)1、Sql 語(yǔ)句準(zhǔn)備:SELECT u.*, o.id, o.number,o.createtime,o.noteFROM user u LEFT JO2、定義 pojo:

14、y_orders o ON u.id = o.user_idOrder.javapublic class Order privateeger id; catch (Exception e) e.prStackTrace(); finally if (sqlSes!= null) sqlSes.close();User.java 在 User 類中加入 Listorders 屬性3、編寫 Mapper 接口 UserMapper.java文件 UserMapper.xmlpublicerface UserMapper List getUserOrderList();public claser p

15、rivateeger id;private String username;/ 用戶private String sex;/ private Date birthday;/ 生日private String address;/ 地址privaist orders;. 省略相應(yīng) get and set 方法privateeger userId; private String number; private Date createtime; private String note;.省略 get and set 方法!- -SELECTu.*, o.id,o.number,o.createtime

16、,o.noteFROMuser uLEFT JOy_orders o ON u.id = o.user_idcollection 部分定義了用戶關(guān)聯(lián)的訂單信息。表示關(guān)聯(lián)查詢結(jié)果集property=orders:關(guān)聯(lián)查詢的結(jié)果集在 User 對(duì)象的上哪個(gè)屬性。ofType=order:指定關(guān)聯(lián)查詢的結(jié)果集中的對(duì)象類型即 List 中的對(duì)象類型。此處可以使用別名,也可以使用全名。4、MyBatis配置文件加載 Mapper 接口6、編寫測(cè)試類及方法OrdersTest 類:(跟本章上例不同部分列出)public void queryByAll() List list = null; SqlSessqlSes= null; try sqlSes= sqlSesFactory.openSes(); UserMapper userMapper =sqlSes.getMapper(UserMapper.class); list = userMapper.getUserOrderList(); for (User userOrders : list) Sy

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論