1.N+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 + "]";
}
}
- 在StudentMapper.xml中
<mapper namespace="com.ouc.mapper.StudentMapper">
<select id="selByTid" parameterType="int" resultType="student">
select * from student where tid = #{0}
</select>
</mapper>
- 在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>
- 测试类
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();
}
}
- 结果
2. 联合查询方式
- 在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>
- 测试类
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();
}
}
- 结果
-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]]]]