文章目录接上篇博客:https://blog.csdn.net/liyuuhuvnjjv/article/details/122244531
- 案例:查询所有Student的信息(多对一)
- 步骤一:修改StudentMapper.xml文件
- 步骤二:编写测试类
- 查询结果分析
- 解决办法:
- 按照查询嵌套处理(子查询):
- 修改StudentMapper.xml文件
- 查询结果:
- 按照结果嵌套处理(联表查询)
- 案例:查询Teacher信息
- 步骤一:修改实体类
- Student类
- Teacher类
- 步骤二:修改TeacherMapper类
- 步骤三:修改TeacherMapper.xml文件
- 步骤四:编写测试类
- 查询结果分析
- 解决方案:
- 按结果嵌套查询(联合查询):
- 步骤一:修改实体类
- 步骤二:修改TeacherMapper.xml文件
- 步骤三:编写测试类
- 查询结果
案例:查询所有Student的信息(多对一) 步骤一:修改StudentMapper.xml文件
步骤二:编写测试类select * from mybatis.student
import org.apache.ibatis.session.SqlSession;
import org.dao.StudentMapper;
import org.dao.TeacherMapper;
import org.junit.Test;
import org.pojo.Student;
import org.pojo.Teacher;
import org.utils.MybatisUtils;
import java.util.List;
public class MyTest {
@Test
public void testStudent(){
SqlSession sqlSession = null;
try{
sqlSession = MybatisUtils.getSqlSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List studentList = mapper.getStudent();
for(Student student : studentList){
System.out.println(student);
}
}catch(Exception e){
e.printStackTrace();
}catch(Error e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
}
查询结果分析
问题:经过上述查询,虽然Student的id,name已经查到了,但是其对应的teacher为null!!!
利用resultMap处理结果集映射
修改StudentMapper.xml文件查询结果:
可以看到,这样我们就得到了完整的Student信息
- 修改StudentMapper.xml文件
案例:查询Teacher信息 步骤一:修改实体类 Student类select s.id sid,s.name sname,t.name tname from student s,teacher t where s.tid = t.id;
package org.pojo;
public class Student {
private int id;
private String name;
private int tid;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + ''' +
", tid=" + tid +
'}';
}
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 int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
}
Teacher类
package org.pojo;
import java.util.List;
public class Teacher {
private int id;
private String name;
//一个老师拥有多个学生
private List students;
@Override
public String toString() {
return "Teacher{" +
"id=" + id +
", name='" + name + ''' +
", students=" + students +
'}';
}
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 getStudents() {
return students;
}
public void setStudents(List students) {
this.students = students;
}
}
步骤二:修改TeacherMapper类
package org.dao;
import org.apache.ibatis.annotations.Param;
import org.pojo.Teacher;
import java.util.List;
public interface TeacherMapper {
//获取老师
List getTeacher();
}
步骤三:修改TeacherMapper.xml文件
步骤四:编写测试类select * from mybatis.teacher;
import org.apache.ibatis.session.SqlSession;
import org.dao.TeacherMapper;
import org.junit.Test;
import org.pojo.Teacher;
import org.utils.MybatisUtils;
import java.util.List;
public class MyTest {
@Test
public void test(){
SqlSession sqlSession = null;
try{
sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
List teacherList = mapper.getTeacher();
for(Teacher teacher : teacherList){
System.out.println(teacher);
}
}catch(Exception e){
e.printStackTrace();
}catch(Error e){
e.printStackTrace();
}finally{
sqlSession.close();
}
}
}
查询结果分析
问题:虽然查询到了teacher的信息,但是其对应的Student为null!!!
解决方案: 按结果嵌套查询(联合查询): 步骤一:修改实体类修改TeacherMapper类
package org.dao;
import org.apache.ibatis.annotations.Param;
import org.pojo.Teacher;
import java.util.List;
public interface TeacherMapper {
Teacher getTeacher(@Param("tid") int id);
//select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid = t.id
}
步骤二:修改TeacherMapper.xml文件
步骤三:编写测试类select s.id sid,s.name sname,t.name tname,t.id tid from student s,teacher t where s.tid = t.id and t.id=#{tid}
import org.apache.ibatis.session.SqlSession;
import org.dao.TeacherMapper;
import org.junit.Test;
import org.pojo.Teacher;
import org.utils.MybatisUtils;
import java.util.List;
public class MyTest {
@Test
public void testTeacher(){
SqlSession sqlSession = null;
try{
sqlSession = MybatisUtils.getSqlSession();
TeacherMapper mapper = sqlSession.getMapper(TeacherMapper.class);
Teacher teacher = mapper.getTeacher(1);
System.out.println(teacher);
}catch(Exception e){
e.printStackTrace();
}catch(Error e){
e.printStackTrace();
}finally {
sqlSession.close();
}
}
}
查询结果
可以看到,经过上面的按结果嵌套查询,我们已经得到了该teacher的信息,包括其下的student信息



