91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在Mybatis項目中使用 Association

發布時間:2020-11-10 17:22:20 來源:億速云 閱讀:168 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關如何在Mybatis項目中使用 Association,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

接下來的文章中,關于Mybatis的示例,全部來自于Mybatis代碼中的單元測試代碼,通過這些代碼能夠學習Mybatis中很有用的知識,這些內容在doc文檔中可能只是簡單提到了,或者有一些文字說明,通過這些單元測試能更直觀的了解如何在Mybatis使用這些內容。

這一節內容為Association關聯的結果查詢,就是在查詢出結果后,根據查詢的列和resultMap定義的對應關系,來創建對象并寫入值。

  • association – 一個復雜的類型關聯;許多結果將包成這種類型
  • 嵌入結果映射 – 結果映射自身的關聯,或者參考一個
     

(注:“參考一個”,這里參考一個是通過對象的Key來唯一確定的,如果Key值一樣,就直接用已經存在的這個對象。)

association是resultMap中的一個配置選項,下面是用到的類的UML圖:

如何在Mybatis項目中使用 Association

Car對象中包含了Engine和Brakes兩個對象。Mapper是接口對象。AssociationTest是該測試對象。

SQL表結構和數據:

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文件:

<mapper namespace="org.apache.ibatis.submitted.associationtest.Mapper"> 
  <resultMap type="org.apache.ibatis.submitted.associationtest.Car" id="carResult"> 
    <id column="carid" property="id"/> 
    <result column="cartype" property="type"/> 
    <association property="engine" resultMap="engineResult"/> 
    <association property="brakes" resultMap="brakesResult"/> 
  </resultMap> 
  <resultMap type="org.apache.ibatis.submitted.associationtest.Engine" id="engineResult"> 
    <result column="enginetype" property="type"/> 
    <result column="enginecylinders" property="cylinders"/> 
  </resultMap> 
  <resultMap type="org.apache.ibatis.submitted.associationtest.Brakes" id="brakesResult"> 
    <result column="brakesType" property="type"/> 
  </resultMap> 
  <select id="getCars" resultMap="carResult"> 
  select * from cars 
 </select> 
  <select id="getCarsNonUnique" resultMap="carResult"> 
  select 1 as carid, cartype, enginetype, enginecylinders, brakestype from cars 
 </select> 
  <select id="getCars2" resultMap="carResult"> 
  select 1 as carid, cartype, enginetype, enginecylinders, brakestype from cars where carid in (1,2) 
 </select> 
</mapper> 

其中的一個測試用例:

@Test 
 public void shouldGetAllCars() { 
  SqlSession sqlSession = sqlSessionFactory.openSession(); 
  try { 
   Mapper mapper = sqlSession.getMapper(Mapper.class); 
   List<Car> cars = 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返回值:

如何在Mybatis項目中使用 Association

association是嵌套查詢中最簡單的一種情況,像上述例子中,一般我們都會用一個Car對面包含所有的屬性,這里的例子使用了嵌套對象,使對像的結構更鮮明。不過一般情況下很少會拆分一個對象為多個,用的多的時候是多表查詢的嵌套。

上面XML中的

carResult和engieResult,brakesResult都是分別定義,carResult引用了另外兩個resultMap。

對于不需要重用嵌套對象的情況,還可以直接這么寫,把上面的XML修改后:

<resultMap type="org.apache.ibatis.submitted.associationtest.Car" id="carResult"> 
  <id column="carid" property="id"/> 
  <result column="cartype" property="type"/> 
  <association property="engine" javaType="org.apache.ibatis.submitted.associationtest.Engine"> 
    <result column="enginetype" property="type"/> 
    <result column="enginecylinders" property="cylinders"/> 
  </association> 
  <association property="brakes" resultMap="brakesResult"/> 
</resultMap> 

為了對比和區分,這里指修改了Engine,在association元素上增加了屬性javaType,元素內增加了result映射。

上述就是小編為大家分享的如何在Mybatis項目中使用 Association了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

建阳市| 连南| 承德市| 阜阳市| 辽阳县| 大埔区| 高州市| 抚宁县| 新龙县| 铁岭市| 兴业县| 亚东县| 南汇区| 宜章县| 道孚县| 滦南县| 徐汇区| 进贤县| 华容县| 诸城市| 吴旗县| 景洪市| 疏勒县| 岗巴县| 湖南省| 石狮市| 阳高县| 东乡族自治县| 教育| 东安县| 怀来县| 神农架林区| 锡林郭勒盟| 离岛区| 绍兴市| 云南省| 平顺县| 汝州市| 江达县| 新竹县| 武川县|