Mybatis学习笔记——一对多多表查询

有了上一篇一对一的基础,一对多的学习就简单了。

  • 表数据如下:
  • orders表:

Mybatis学习笔记——一对多多表查询

  • user表:

Mybatis学习笔记——一对多多表查询

mapper映射文件:

	<!-- user对order:一对多  多表查询
	public List<User> selectUser2Orders(); -->
	
	<resultMap type="User" id="user">
		<id column="uid" property="id" />
		<result column="name" property="name" />

        <!-- collection元素:用于配置一对多关系属性映射
                property属性:填写一的一方pojo中对应多的一方的属性名
                ofType属性:填写多的一方的实体类型
         -->
		<collection property="orderlist" ofType="Orders">
			<id column="id" property="id" />
			<result column="number" property="number" />
		</collection>
	</resultMap>
	
	<select id="selectUser2Orders" resultMap="user">
		select o.id, o.number, u.id as uid, u.name 
		from orders o 
		right join user u 
		on o.user_id=u.id
	</select>

实体类书写:

	// 其他固有属性不变,只是添加了用于表示一对多关系的属性
        private List<Orders> orderlist;
	
	public List<Orders> getOrdeslist() {
		return orderlist;
	}
	public void setOrdeslist(List<Orders> ordeslist) {
		this.orderlist = ordeslist;
	}

Mapper接口:

//	user对order:一对多  多表查询
	public List<User> selectUser2Orders();

测试代码:

	@Test
	public void testUser2Order() throws Exception {
		InputStream ins = Resources.getResourceAsStream("SqlMapConfig.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(ins);
		SqlSession session = sessionFactory.openSession();
		UserMapper mapper = session.getMapper(UserMapper.class);

		List<User> userlist = mapper.selectUser2Orders();
		for (User user : userlist) {
			System.out.println(user);
		}
	}

测试结果:测试成功,由于一个User对象中可以有多个Order对象,输出显示过于繁琐,所以这里采用Debug方式来查看数据是否封装完成,测试结果正确:

Mybatis学习笔记——一对多多表查询