這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)如何在Mybatis項(xiàng)目中使用 Association,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
創(chuàng)新互聯(lián)公司專注于南溪網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供南溪營銷型網(wǎng)站建設(shè),南溪網(wǎng)站制作、南溪網(wǎng)頁設(shè)計(jì)、南溪網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造南溪網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供南溪網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
接下來的文章中,關(guān)于Mybatis的示例,全部來自于Mybatis代碼中的單元測試代碼,通過這些代碼能夠?qū)W習(xí)Mybatis中很有用的知識(shí),這些內(nèi)容在doc文檔中可能只是簡單提到了,或者有一些文字說明,通過這些單元測試能更直觀的了解如何在Mybatis使用這些內(nèi)容。
這一節(jié)內(nèi)容為Association關(guān)聯(lián)的結(jié)果查詢,就是在查詢出結(jié)果后,根據(jù)查詢的列和resultMap定義的對(duì)應(yīng)關(guān)系,來創(chuàng)建對(duì)象并寫入值。
(注:“參考一個(gè)”,這里參考一個(gè)是通過對(duì)象的Key來唯一確定的,如果Key值一樣,就直接用已經(jīng)存在的這個(gè)對(duì)象。)
association是resultMap中的一個(gè)配置選項(xiàng),下面是用到的類的UML圖:
Car對(duì)象中包含了Engine和Brakes兩個(gè)對(duì)象。Mapper是接口對(duì)象。AssociationTest是該測試對(duì)象。
SQL表結(jié)構(gòu)和數(shù)據(jù):
drop table cars if exists; create table cars ( carid integer, cartype varchar(20), enginetype varchar(20), enginecylinders integer, brakestype varchar(20) ); insert into cars (carid, cartype, enginetype, enginecylinders, brakestype) values(1, 'VW', 'Diesel', 4, null); insert into cars (carid, cartype, enginetype, enginecylinders, brakestype) values(2, 'Opel', null, null, 'drum'); insert into cars (carid, cartype, enginetype, enginecylinders, brakestype) values(3, 'Audi', 'Diesel', 4, 'disk'); insert into cars (carid, cartype, enginetype, enginecylinders, brakestype) values(4, 'Ford', 'Gas', 8, 'drum');
Mapper.xml文件:
其中的一個(gè)測試用例:
@Test public void shouldGetAllCars() { SqlSession sqlSession = sqlSessionFactory.openSession(); try { Mapper mapper = sqlSession.getMapper(Mapper.class); Listcars = mapper.getCars(); Assert.assertEquals(4, cars.size()); Assert.assertEquals("VW", cars.get(0).getType()); Assert.assertNotNull(cars.get(0).getEngine()); Assert.assertNull(cars.get(0).getBrakes()); Assert.assertEquals("Opel", cars.get(1).getType()); Assert.assertNull(cars.get(1).getEngine()); Assert.assertNotNull(cars.get(1).getBrakes()); } finally { sqlSession.close(); } }
cars返回值:
association是嵌套查詢中最簡單的一種情況,像上述例子中,一般我們都會(huì)用一個(gè)Car對(duì)面包含所有的屬性,這里的例子使用了嵌套對(duì)象,使對(duì)像的結(jié)構(gòu)更鮮明。不過一般情況下很少會(huì)拆分一個(gè)對(duì)象為多個(gè),用的多的時(shí)候是多表查詢的嵌套。
上面XML中的
carResult和engieResult,brakesResult都是分別定義,carResult引用了另外兩個(gè)resultMap。
對(duì)于不需要重用嵌套對(duì)象的情況,還可以直接這么寫,把上面的XML修改后:
為了對(duì)比和區(qū)分,這里指修改了Engine,在association元素上增加了屬性javaType,元素內(nèi)增加了result映射。
上述就是小編為大家分享的如何在Mybatis項(xiàng)目中使用 Association了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。