Mybatis之一對多查詢標籤

使用Mybatis-generator生成實體類與dao層相關信息後, 需要用到一對多查詢時, 修改SQL映射文件

1. 數據庫結構


1.1 獎項(award)表

award表

1.2獎項照片表(award_photo)

獎項照片表


2. 實體類描述

2.1 Award

package com.turing.team_website.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;

import java.util.Date;
import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Award {

    private Integer awardId;

    private String awardName;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date awardTime;
	/**
	 *  照片路徑集合 
	 */
    private List<String> photoLocList;

}

2.2 AwardMapper

package com.turing.team_website.dao;

import com.turing.team_website.entity.Award;
import com.turing.team_website.entity.AwardExample;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface AwardMapper {
    long countByExample(AwardExample example);

    int deleteByExample(AwardExample example);

    int insert(Award record);

    int insertSelective(Award record);
    
    List<Award> selectByExample(AwardExample example);

    int updateByExampleSelective(@Param("record") Award record, @Param("example") AwardExample example);

    int updateByExample(@Param("record") Award record, @Param("example") AwardExample example);
}

3.SQL映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.turing.team_website.dao.AwardMapper">
  <resultMap id="BaseResultMap" type="com.turing.team_website.entity.Award">
    <result column="award_id" jdbcType="INTEGER" property="awardId" />
    <result column="award_name" jdbcType="VARCHAR" property="awardName" />
    <result column="award_time" jdbcType="DATE" property="awardTime" />
  </resultMap>
  <!--帶獎項照片的查詢映射列-->
  <resultMap id="WithPhotoBaseResultMap" type="com.turing.team_website.entity.Award">
    <result column="award_id" jdbcType="INTEGER" property="awardId" />
    <result column="award_name" jdbcType="VARCHAR" property="awardName" />
    <result column="award_time" jdbcType="DATE" property="awardTime" />
    <!--一對多查詢-->
    <!--將award_photo_loc封裝進List集合中, 泛型爲String-->
    <collection property="photoLocList" ofType="java.lang.String" javaType="java.util.List">
      <result column="award_photo_loc" />
    </collection>
  </resultMap>
  <sql id="Example_Where_Clause">
    ...
  </sql>
  <sql id="Base_Column_List">
    award_id, award_name, award_time
  </sql>
  <!--帶獎項圖片路徑的查詢, 必須要有別名, 否則關聯查詢時會報award_id描述不清晰錯誤-->
  <sql id="With_PhotoLoc_Base_Column_List">
    a.award_id, a.award_name, a.award_time, ap.award_photo_loc
  </sql>
  <select id="selectByExample" parameterType="com.turing.team_website.entity.AwardExample" resultMap="WithPhotoBaseResultMap">
    select
    <if test="distinct">
      distinct
    </if>
    <!--關聯查詢-->
    <include refid="With_PhotoLoc_Base_Column_List" />
    from award a inner join award_photo ap where a.award_id = ap.award_id
    <if test="_parameter != null">
      <include refid="Example_Where_Clause" />
    </if>
    <if test="orderByClause != null">
      order by ${orderByClause}
    </if>
  </select>
  ...其它省略
</mapper>
關鍵字 collection ofType javaType
解釋 一對多查詢時使用的標籤 多的一方的數據類型 多的一方的封裝集合類型(數組,集合…)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章