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标签的方式相同

原文地址:https://www.cnblogs.com/canger/p/9997422.html

时间: 2024-10-23 05:26:35

MyBatis关联查询,一对多关联查询的相关文章

Mybatis学习笔记-一对多关联

需求:根据classId查询对应的班级信息,包括学生,老师 Student实体类 public class Student {          private int id;          private String name;          //... } Classes 实体类 public class Classes {          private int id;          private String name;          private Teacher

阶段3 1.Mybatis_12.Mybatis注解开发_7 Mybatis注解开发一对多的查询配置

一对多的配置,一个用户对应多个账户 需要在Accout里面增加根据用户的uid查询的方法 在user里面指定子一对多的查询配置 换行显示 测试 把这里注销掉.测试延迟加载,代码注释掉后,延迟加载就没有再执行.什么时候用才会去加载数据 测试只执行了 select * 原文地址:https://www.cnblogs.com/wangjunwei/p/11334815.html

mybatis一对一 和 一对多 嵌套查询

实际项目中的,接口对外VO  会出现 一对一 和 一对多的情况,举例:小区 下面有 楼栋  ,楼栋 下面有 房屋    ,   房屋里面又房间 小区Vo  : districtVo { id: name: List<buildVo> builds } 楼栋Vo :buildVo{ id; name; did; List<apartmentVo> apartments } 房屋Vo :apartmentVo{ id: name: List<RoomVo> } ......

mybatis中的一对多的查询

一对多分为单条sq语句l和多条sql语句 下面就以员工和就职部门为例: 部门实体类 private Integer deptno;private String deptname;//植入员工实体集合private List<Emp> emps=new ArrayList<Emp>(); public String getDeptname() { return deptname;}public void setDeptname(String deptname) { this.dept

Mybatis 配置resultMap一对多关联映射

resultMap配置: 引用: PO类: 接口: 测试: public class UserMapperTest { private SqlSessionFactory sqlSessionFactory = null; @Before public void init() throws Exception { // 第一步:创建一个SQLSessionFactoryBuilder对象. SqlSessionFactoryBuilder sqlSessionFactoryBuilder = n

mybatis collection 一对多关联查询,单边分页的问题总结!

若想直接通过sql实现多级关联查询表结构得有2 个必不可少的字段:id ,parentId,levelId id:主键id, parentId:父id levelId:表示第几级(表本身关联查询的时候需要用到,不然会有重复数据) 利用mybatis collection 实现一对多关联查询 Dto:(一级) public class ProvinceInfoDTO implements Serializable { private String id; private String name;

ThinkPHP5——模型的一对多关联

关联定义 一对多关联的情况也比较常见,使用hasMany方法定义,参数包括: hasMany('关联模型名','外键名','主键名',['模型别名定义']); 例如租客表和宿舍表,一个宿舍有多个租客,宿舍和租客一对多的关系,表结构如下: #宿舍 CREATE TABLE `apartment` ( `apar_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号', `apar_name` varchar(40) DEFAULT NULL COMMENT

hihernate一对多关联映射

一对多关联映射利用了多对一关联映射原理 多对一关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是多指向一 一对多关联映射:在多的一端加入一个外键指向一的一端,它维护的关系是一指向多 举个例子员工和老板.你说是老板记员工比较容易还是员工记老板比较容易呢?很明显记少的比较容易啊,能维护二者的关系也能减少工作量.hibernate当然也是这么做的. 也就是说一对多和多对一的映射策略是一样的,只是站的角度不同 在关系型数据库理论中,"多对一"关联同于"一对多"关联

mybatis一对多关联查询+pagehelper-&gt;分页错误(toSolve)

mybatis一对多关联查询+pagehelper->分页错误. 现象: 网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585 解决: todo 疑惑: 之前有人提过类似的issue(https://github.com/pagehelper/Mybatis-PageHelper/issues/149)为什么被关闭了 原文地址:https://www.cnblogs.com/goingforward/p/8492448.html