person

package com.kerwin.mybatis.pojo;

import java.util.List;

public class Person {

private int id;
    private String name;
    private List<Orders> orderList;

public int getId() {
        return id;
    }

public void setId(int id) {
        this.id = id;
    }

public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }

public List<Orders> getOrderList() {
        return orderList;
    }

public void setOrderList(List<Orders> orderList) {
        this.orderList = orderList;
    }

@Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + "]";
    }

public Person() {
        super();
        // TODO Auto-generated constructor stub
    }

public Person(int id, String name, List<Orders> orderList) {
        super();
        this.id = id;
        this.name = name;
        this.orderList = orderList;
    }

}
order

package com.kerwin.mybatis.pojo;

public class Orders {
    private int id;
    private double price;
    private Person person;
    
    
    
    public Person getPerson() {
        return person;
    }

public void setPerson(Person person) {
        this.person = person;
    }

public int getId() {
        return id;
    }

public void setId(int id) {
        this.id = id;
    }

public double getPrice() {
        return price;
    }

public void setPrice(double price) {
        this.price = price;
    }

@Override
    public String toString() {
        return "Orders [id=" + id + ", price=" + price + "]";
    }

public Orders() {
        super();
        // TODO Auto-generated constructor stub
    }

}
PersonMapper.xml

<?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.kerwin.mybatis.pojo.Person">
    <resultMap type="com.kerwin.mybatis.pojo.Person" id="personreSultMap">
        <id column="p_id" property="id"/>
        <result column="name" property="name"/>
        <collection property="orderList" ofType="com.kerwin.mybatis.pojo.Orders" column="pid">
            <id column="o_id" property="id"/>
            <result column="price" property="price"/>
        </collection>
        
    </resultMap>
    
    <select id="selectPersonFetchOrder" parameterType="int" resultMap="personreSultMap" >
        select p.*,o.* from person p,orders o where o.pid=p.p_id and p.p_id=#{id}
    </select>
    
    
</mapper>

OrdersMapper.xml

<?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.kerwin.mybatis.pojo.Orders">
    <resultMap type="com.kerwin.mybatis.pojo.Orders" id="OrdersResultMap">
        <id column="o_id" property="id"/>
        <result column="price" property="price"/>
        <association property="person" javaType="com.kerwin.mybatis.pojo.Person">
            <id column="p_id" property="id"/>
            <result column="name" property="name"/>
        </association>
    </resultMap>
    
    <select id="selectOrdersFetchPerson" resultMap="OrdersResultMap">
        select p.*,o.* from person p,orders o where o.pid=p.p_id and o.o_id=#{id}
    </select>

</mapper>

测试类:

/**
 *
 */
package com.kerwin.mybatis.test;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.BeforeClass;
import org.junit.Test;

import com.kerwin.mybatis.pojo.Orders;
import com.kerwin.mybatis.pojo.Person;

/**
 * @author Administrator
 *
 */
public class PersonAndOrderTest {

private static SqlSessionFactory sessionFactory;
    
    /**
     * @throws java.lang.Exception
     */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        SqlSessionFactoryBuilder factoryBuilder = new SqlSessionFactoryBuilder();
        InputStream inputStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        sessionFactory = factoryBuilder.build(inputStream);

}
    
    //一对多,查询person(一)级联查询订单order(多)
    @Test
    public void testSelectPersonFetchOrder() throws Exception {
        SqlSession session = sessionFactory.openSession();
        Person person = session.selectOne("com.kerwin.mybatis.pojo.Person.selectPersonFetchOrder", 1);
        System.out.println(person);
        System.out.println(person.getOrderList().size());
        for(Orders orders : person.getOrderList()){
            System.out.println(orders);
        }
        session.close();
    }
    
    //多对一,查询订单order(多)级联查询person(一)
    @Test
    public void testSelectOrdersFetchPerson() throws Exception{
        SqlSession session = sessionFactory.openSession();
        Orders orders = session.selectOne("com.kerwin.mybatis.pojo.Orders.selectOrdersFetchPerson", 1);
        System.out.println(orders);
        System.out.println(orders.getPerson());
        session.close();
    }
    
}

五、测试结果

1.一对多,查询person(一)级联查询订单order(多)


2.多对一,查询订单order(多)级联查询person(一)


注意:两张表中的主键id字段名要唯一,例如不能都写id,不然的话,在一对多查询的时候就会出现:级联出来的订单项只有一条记录。我之前就是将两张表的主键id字段名都写为id,导致测试结果级联出来的多一直只有一条数据,具体如下:

mybatis 一对多的更多相关文章

  1. mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

    mybatis 一对多的注入 指的是连表查询时候 将不同的查询结果以列表存储对象形式 注入进去 多对一指的是 查询多条结果但都是一样的 只需注入一条

  2. Java基础-SSM之mybatis一对多和多对一关系映射

    Java基础-SSM之mybatis一对多和多对一关系映射 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建customers表: ...

  3. mybatis一对多关联查询+pagehelper->分页错误

    mybatis一对多关联查询+pagehelper->分页错误. 现象: 网上其他人遇到的类似问题:https://segmentfault.com/q/1010000009692585 解决: ...

  4. MyBatis一对多和多对多xml配置

    MyBatis一对多和多对多xml配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ma ...

  5. mybatis一对多关联关系映射

    mybatis一对多关联关系映射 一对多关联关系只需要在多的一方引入少的一方的主键作为外键即可.在实体类中就是反过来,在少的一方添加多的一方,声明一个List 属性名 作为少的一方的属性. 用户和订单 ...

  6. 3.SpringBoot整合Mybatis(一对多)

    前言: Mybatis一对多的处理关系: 一个人有好多本书,每本书的主人只有一个人.当我们查询某个人拥有的所有书籍时,就涉及到了一对多的映射关系. 一.添加数据表: CREATE TABLE `boo ...

  7. mybatis 一对多查询 集合创建空对象的问题

    在做 mybatis 一对多查询的时候, resultMap 里面用到了集合标签 collection ,后来发现 当该条数据没有子集的时候, collection 会自动创建一个属性都是null的对 ...

  8. mybatis 一对多和多对一 简单案例笔记

    以案例说明(以下案例代码都敲过验证过) 多对一(多个学生对一个老师  即学生集合中都存一个老师对象) Mybatis多对一实现方式1: //定义Student 和 Teacher 实体 @Data p ...

  9. Mybatis 一对多延迟加载,并且子查询中与主表字段不对应 (19)

    Mybatis  一对多延迟加载,并且子查询中与主表字段不对应应用说明. 实现一对多关联(懒加载),一个教研组对应多个教师,既:教师的教研编号与教研组的教研编号关联,并且教师关联教研组外键与教研组编号 ...

  10. 7.mybatis一对多关联查询

    和第5节一对一查询类似,但是不同的是,一对一使用的是association,而一对多使用collection. 实例: 1个班级Class,对应1个老师Teacher,对应多个学生Student 1. ...

随机推荐

  1. 获取span中的值

    js-code:var baseinfoallfeesum=$("#allFeeSum").html(); $("#baseInfoAllFeeSum").va ...

  2. Appium+python自动化28-name定位【转载】

    本篇转自博客:上海-悠悠 前言 appium1.5以下老的版本是可以通过name定位的,新版本从1.5以后都不支持name定位了 一. name定位报错 1.最新版appium V1.7用name定位 ...

  3. NetBeans中从实体创建Restful webservice工程

    分布式系统和移动计算...... 这学期上的课,名字听起来是不是很霸气? 然而 其实就是 restful 和 安卓...... 汗....... 用的IDE还是netBeans, 第一次听说有这个ID ...

  4. 在web项目下注册MySQL数据库驱动失败

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at org.apache.catalina.loader.WebappClassLoa ...

  5. 【转+整理】jenkins与SonarQube集成

    一.SonarQube 我的理解是,SonarQube就是一个对代码进行分析的平台,其功能可以通过插件扩展.支持多种语言,也支持静态代码检查.发现潜在bug等. 以下是参考信息: 维基百科:https ...

  6. selenium 难定位元素,时间插件,下拉框定位,string包含,定位列表中的一个,技巧

    关于frame: 如果网页存在iframe的话,传统的定位有时候找不到元素,需要切换frame: # 切换到leftFrame定位“测井设计” driver.switch_to_frame(" ...

  7. Codeforces #428 Div2 D

    #428 Div2 D 题意 给出一些数,现在要求找出一些数满足 \(i_1 < i_2 < i_3 < ... < i_k\) 以及 \(gcd(a_{i_1}, a_{i_ ...

  8. Codeforces 1038E Maximum Matching

    可能写了个假算法 假设定义:含有一个欧拉路的图为类欧拉图 欧拉路的定义:一个无向连通图中,存在一条路径对所有边都遍历且仅遍历一次:判断方法:该连通图中度为奇数的点的个数不能超过2,即为0或者2 题目解 ...

  9. hihocoder Counting Islands II(并查集)

    Counting Islands II 描述 Country H is going to carry out a huge artificial islands project. The projec ...

  10. 【Docker】基本命令使用介绍

    # docker命令行学习 ## docker run- docker run --help:老实说这条最管用了- docker run -it:交互模式,允许控制台输出 - docker run - ...