MyBatis(十五)——<resultMap>实现关联集合对象(N+1方式和联合查询方式)

1.N+1方式

实现步骤:

  1. 在Teacher中添加List<student>
package com.ouc.pojo;

import java.util.List;

public class Teacher {
	private int tid;
	private String tname;
	private List<Student> list;
	public int getTid() {
		return tid;
	}
	public void setTid(int tid) {
		this.tid = tid;
	}
	public String getTname() {
		return tname;
	}
	public void setTname(String tname) {
		this.tname = tname;
	}
	public List<Student> getList() {
		return list;
	}
	public void setList(List<Student> list) {
		this.list = list;
	}
	@Override
	public String toString() {
		return "Teacher [tid=" + tid + ", tname=" + tname + ", list=" + list + "]";
	} 
}
  1. 在StudentMapper.xml中
  <mapper namespace="com.ouc.mapper.StudentMapper">
	<select id="selByTid" parameterType="int" resultType="student">
		select * from student where tid = #{0}
	</select>
  </mapper>
  1. 在TeacherMapper.xml中
<mapper namespace="com.ouc.mapper.TeacherMapper">
  	<resultMap type="teacher" id="mymap">
  		<id column="tid" property="tid"/>
 		<result column="tname" property="tname"/>
 		<collection property="list" select="com.ouc.mapper.StudentMapper.selByTid" column="tid"></collection> 	
  	</resultMap>
  	
  	<select id="selAll" resultMap="mymap">
  		select * from teacher
  	</select>
  </mapper>
  1. 测试类
package com.ouc.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 com.ouc.pojo.Teacher;

public class Test {
	public static void main(String[] args) throws IOException {
		InputStream is = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		SqlSession session = factory.openSession();
		List<Teacher> list = session.selectList("com.ouc.mapper.TeacherMapper.selAll");
		System.out.println(list);
		session.close();
	}
}

  1. 结果
    在这里插入图片描述

2. 联合查询方式

  1. 在teacherMapper.xml 中添加
    (1)mybatis 可以通过主键判断对象是否被加载过.
    (2)不需要担心创建重复Teacher
  <mapper namespace="com.ouc.mapper.TeacherMapper">
  	<resultMap type="teacher" id="mymap">
  		<id column="tid" property="tid"/>
 		<result column="tname" property="tname"/>
 		<collection property="list" ofType="Student">
 			<id property="sid" column="sid"/>
 			<result property="sname" column="sname"/>
 			<result property="sage" column="sage"/>
 			<result property="tid" column="tid"/>
 		</collection> 	
  	</resultMap>
  	
  	<select id="selAll" resultMap="mymap">
  		select t.tid ttid,tname,sid,sname,sage,s.tid stid 
  		from teacher t left join student s 
  		on t.tid=s.tid
  	</select>
  </mapper>
  1. 测试类
package com.ouc.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 com.ouc.pojo.Teacher;

public class Test {
	public static void main(String[] args) throws IOException {
		InputStream is = Resources.getResourceAsStream("mybatis.xml");
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		SqlSession session = factory.openSession();
		List<Teacher> list = session.selectList("com.ouc.mapper.TeacherMapper.selAll");
		System.out.println(list);
		session.close();
	}
}

  1. 结果

-org.apache.ibatis.logging.jdbc.BaseJdbcLogger => Preparing: select t.tid ttid,tname,sid,sname,sage,s.tid stid from teacher t left join student s on t.tid=s.tid
-org.apache.ibatis.logging.jdbc.BaseJdbcLogger => Parameters:
-org.apache.ibatis.logging.jdbc.BaseJdbcLogger <= Total: 10
[Teacher [tid=0, tname=老师1, list=[Student [sid=1, sname=学生1, sage=1, tid=0], Student [sid=2, sname=学生2, sage=2, tid=0], Student [sid=3, sname=学生3, sage=3, tid=0], Student [sid=4, sname=学生4, sage=4, tid=0], Student [sid=5, sname=学生5, sage=5, tid=0], Student [sid=6, sname=学生6, sage=6, tid=0], Student [sid=7, sname=学生7, sage=7, tid=0], Student [sid=8, sname=学生8, sage=8, tid=0], Student [sid=9, sname=学生9, sage=9, tid=0], Student [sid=10, sname=学生10, sage=10, tid=0]]]]

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值