真实情况中,我们处理的是数据库多个表关联查询的任务,如何处理种业务有助于进一步理解Mybatis的应用
目录
1 搭建环境
1.1 实体类pojo
学生和老师:学生关联老师
1.2 接口
1.3 接口的配置文件
1.4 核心配置文件绑定xml
1.5 测试
2 多对一的处理 association
多个学生对应一个老师
2.1 未关联Student和Teacher的查询
分析:
Q:为什么查不出来教师的信息?
A:因为学生的实体类的属性名 Teacher 和实体类的字段名 tid 不一致
解决办法就是:结果集映射 将两者一致
2.2 方案一
先查询出所有学生的信息------>再根据学生的tid找到对应的老师
select * from Student
-------------> select * from Teacher where id = tid
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.dao.StudentMapper">
<!-- stu: 接口中定义的方法 -->
<select id="stu" resultMap="STUDENT">
select * from student
</select>
<!-- type: stu的类型是Student -->
<resultMap id="STUDENT" type="Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<association property="teacher" column="tid" javaType="Teacher" select="GetTeacher"/>
<!-- association: 是对象的时候使用( Teacher teacher对象)
column:数据库字段
javaType:这里用了别名(扫描包)Teacher的实体类
select:传入子语句
-->
</resultMap>
<select id="GetTeacher" resultType="Teacher">
select * from teacher where id=#{tid}
<!-- {tid}里面的tid可以自定义,不一定为tid,这里为了规范,强调将association的column的tid传过来-->
</select>
</mapper>
2.3 方法二
结果嵌套方法
3 一对多的处理 collection
3.1 未关联Student和Teacher的查询
3.2 方案一
3.3 方案二