MyBatis关联查询,一对多关联查询

实体关系图,一个国家对应多个城市

一对多关联查询可用三种方式实现:

  • 单步查询,利用collection标签为级联属性赋值;
  • 分步查询:
    • 利用association标签进行分步查询;
    • 利用collection标签进行分步查询

单步查询

利用collection标签实现一对多单步关联查询:

  • 指定进行关联查询的Java Bean字段,即collection标签的 property 属性;
  • 指定集合中的Java Bean类型,即collection标签的 ofType属性;

 实体类

public class CountryPlus {
    Long id;
    String name;
    Date lastUpdate;
    List<City> cityList;
}
public class City {
    Long id;
    String name;
    Long countryId;
    Date lastUpdate;
}

查询标签

    <select id="selectCountryPlusById" resultMap="countryPlusResultMap">
        select country.country_id as country_id,
                country,
                country.last_update as last_update,
                city_id,
                city,
                city.country_id as city_country_id,
                city.last_update as city_last_update
        from country left join city on  country.country_id = city.country_id
        where country.country_id=#{id}
    </select>

resultMap

    <resultMap id="countryPlusResultMap" type="canger.study.chapter04.bean.CountryPlus">
        <id column="country_id" property="id"/>
        <result column="country" property="name"/>
        <result column="last_update" property="lastUpdate"/>
        <collection property="cityList" ofType="canger.study.chapter04.bean.City">
            <id column="city_id" property="id"/>
            <result column="city" property="name"/>
            <result column="city_country_id" property="countryId"/>
            <result column="city_last_update" property="lastUpdate"/>
        </collection>
    </resultMap>

 分步查询

利用collection标签进行分步查询

  • 指定collection标签的 property 属性;
  • 通过select属性指定下一步查询使用的 statement id;
  • 通过column属性向下一步查询传递参数,传递多个参数的方法见MyBatis关联查询,一对一关联查询中的分步查询;

select标签

    <select id="selectCountryPlusByIdStep" resultMap="countryPlusResultMapStep">
        select *
        from country
        where country_id=#{id}
    </select>

resultMap标签

    <resultMap id="countryPlusResultMapStep" type="canger.study.chapter04.bean.CountryPlus">
        <id column="country_id" property="id"/>
        <result column="country" property="name"/>
        <result column="last_update" property="lastUpdate"/>
        <collection property="cityList"
                     select="canger.study.chapter04.mapper.CityMapper.selectCityByCountryId"
                     column="country_id">
        </collection>
    </resultMap>

利用association标签进行分步查询

  和使用collection标签的方式相同

猜你喜欢

转载自www.cnblogs.com/canger/p/9997422.html