天天看點

mybatis查詢(一對一查詢)

一、ResultType與ResultMap的差別:

1、ResultType:實作查詢時,需要自定義pojo,pojo的屬性名與sql查詢列名要一緻。個人覺得相對簡單,友善使用。

2、ResultMap:将sql查詢的結果資訊中部分屬性映射到一個pojo中,這裡需要進行映射配置。如果查詢需要使用mybatis的延遲加載,則必須使用ResultMap。

二、資料庫表的關系

mybatis查詢(一對一查詢)

food(食品)表中foodType_id字段為外鍵,對應了foodtype(食品類别)表的id,在food表中,與foodtype屬于一對一關系,一個食品對應一個分類。

三、使用ResultType一對一查詢

1、建構po類:

public class Food {
    private int id;// INT PRIMARY KEY AUTO_INCREMENT, -- 主鍵
    private String foodName;// VARCHAR(20), -- 菜名稱
    private int foodType_id;// INT, -- 所屬菜系, 外鍵字段
    private double price;// DOUBLE, -- 價格
    private double mprice;// DOUBLE, -- 會員價格
    private String remark;// VARCHAR(200), -- 簡介
    private String img;// VARCHAR(100) -- 圖檔
           
public class FoodType {

    private Integer id;//菜類的ID 主鍵 
    private String typename;//菜類的名字 唯一,不為空
    private String typedescribe;//菜類的描述
           

因為使用ResultType,這裡需要再定義一份po,并繼承food類

public class FoodTypeOrFood extends Food {

    private String typename;
           

2、mapper.xml(sql語句):

這裡傳回的類型為自定義的po類,我這裡使用了别名

<select id="findAllFood" resultType="foodTypeOrFood">
        select food.*,foodtype.id,foodtype.typename
        from food,foodtype where food.foodType_id=foodtype.id
</select>
           

3、mapper.java:

List<Food> findAllFood();
           

4、結果:

mybatis查詢(一對一查詢)

這裡我使用了mybatis的一個分頁插件,是以結果看起來比較别扭,但是不難看出typename已經查出來了。

三、使用ResultMap查詢:

1、建構po類:

在上面的food類中加入foodType屬性,并且FoodTypeOrFood 可以删除:

public class Food {
    private int id;// INT PRIMARY KEY AUTO_INCREMENT, -- 主鍵
    private String foodName;// VARCHAR(20), -- 菜名稱
    private int foodType_id;// INT, -- 所屬菜系, 外鍵字段
    private double price;// DOUBLE, -- 價格
    private double mprice;// DOUBLE, -- 會員價格
    private String remark;// VARCHAR(200), -- 簡介
    private String img;// VARCHAR(100) -- 圖檔
    private FoodType foodType;//所屬菜系
           

2、定義結果映射:

<!-- 菜品與菜系的映射 -->
    <resultMap type="food" id="re_food-type">
    <!-- id:食品資訊的唯 一限制 如果由多個字段決定一條唯 一記錄,id标簽需要定義多個 -->
        <id column="id" property="id"/>
        <result column="foodName" property="foodName"/>
        <result column="price" property="price"/>
        <result column="mprice" property="mprice"/>
        <result column="img" property="img"/>
        <result column="foodType_id" property="foodType_id"/>
        <result column="remark" property="remark"/>
        <!-- 配置分類映射資訊 将sql查詢的分類資訊映射到food中的FoodType屬性中
         association:用于單個關聯對象的映射
          property:将關聯資訊映射到food的哪個屬性 
            javaType:映射屬性的類型 -->
        <association property="foodType" javaType="com.wqh.hotel.domain.FoodType">
            <id column="t_id" property="id"/>
            <result column="t_typename" property="typename"/>
            <result column="t_typedescribe" property="typedescribe"/>
        </association>
    </resultMap>
           

3、sql語句:

<select id="findAllFood" resultMap="re_food-type">
  select food.*,foodtype.id as t_id,foodtype.typename as t_typename,foodtype.typedescribe as t_typedescribe from food,foodtype where food.foodType_id=foodtype.id
        </select>
           
mybatis查詢(一對一查詢)

可以看出,這裡以及查詢出foodType的資訊,并且foodType中的與foodType_id是一樣的。

繼續閱讀