按照查询嵌套处理
前提:将Student,Teacher实体类根据数据库创建好,接口还有所对应的xml文件
1、然后在StudentMapper接口增加方法
//获取所有学生及对应老师的信息 public List<Student> getStudents();
2、编写对应的Mapper文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--configuration核心配置文件--> <mapper namespace="com.zang.dao.StudentMapper"> <!-- 需求:获取所有学生及对应的老师信息 思路: 1.获取所有学生的信息 2.根据获取的学生信息的老师ID->获取该老师的信息 3.思考问题,这样学生的结果集中应该包含该老师,该如何处理呢, 数据库中我们一般使用关联查询 1.做一个结果集映射:StudentTeacher 2.StudentTeacher结果集的类型为Student 3.学生中老师的属性为teacher,对应数据库id为tid 多个学生关联一个老师 4.查看官网找到:association一个复杂类型的关联:使用他 处理关联查询 --> <select id="getStudents" resultMap="StudentTeacher"> select * from student </select> <resultMap id="StudentTeacher" type="Student"> <!--association关联属性 property属性名 javaType属性类型 column在多 的一方的表中的列名 --> <association property="tecaher" column="tid" javaType="Teacher" select="getTeacher"/> </resultMap> <!-- 这里传递过来的id,只有一个属性的时候,下面可以写任何值 association中column多参数配置: column="{key=value,key=value}" 其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的 字段名--> <select id="getTeacher" resultType="teacher"> select * from teacher where id=#{id} </select> </mapper>
3、写完之后去MyBatis配置文件中注册Mapper
4、
@Test public void testGetStudents(){ SqlSession session = MybatisUtils.getSession(); StudentMapper mapper = session.getMapper(StudentMapper.class); List<Student> students = mapper.getStudents(); for (Student student : students){ System.out.println( "学生名:"+ student.getName() +"\t老师:"+student.getTeacher().getName()); } }
按照结果嵌套处理
1、接口方法编写
public List<Student> getStudents2();
2、编写mapper文件
<!-- 按查询结果嵌套处理 思路: 1.直接查询出结果,进行结果集的映射 --> <select id="getStudent" resultMap="StudentTeacher"> select s.id sid,s.name sname,t.name tname from student s,teacher t where s.id=t.id </select> <resultMap id="StudentTeacher" type="Student"> <id property="id " column="sid"/> <result property="name" column="sname"/> <!--关联对象property 关联对象在Student实体类中的属性 --> <association property="teacher" javaType="Teacher"> <result property="name" column="tname"/> </association> </resultMap>
3、去mybatis-config文件中注入
4、测试
@Test public void testGetStudents2(){ SqlSession session = MybatisUtils.getSession(); StudentMapper mapper = session.getMapper(StudentMapper.class); List<Student> students = mapper.getStudents(); for (Student student : students){ System.out.println( "学生名:"+ student.getName() +"\t老师:"+student.getTeacher().getName()); } }