多对一处理
多对一:
- 多个学生对应一个老师
- 对学生而言:关联,关联一个老师【多对一】
- 对老师而言,集合,一个老师有很多学生【一对多】
Demo实例:
CREATE TABLE `teacher`(
`id` int(11) NOT NULL,
`name` VARCHAR(50) DEFAULT NULL,
PRIMARY KEY (id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO teacher(`id`,`name`) VALUES(1,'孙笑川');
CREATE TABLE `student`(
`id` int(11) NOT NULL,
`name` VARCHAR(50) DEFAULT NULL,
`tid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO student(`id`,`name`,`tid`) VALUES(1,'小明',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(2,'小红',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(3,'小蓝',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(4,'小绿',1);
INSERT INTO student(`id`,`name`,`tid`) VALUES(5,'小华',1);
测试环境搭建:
1、导入Lombok
2、新建实体类Teacher,Student
3、建立Mapper接口
4、建立Mapper.xml
5、在mybatis-config.xml核心配置文件中注册绑定接口
6、测试查询是否成功
按照嵌套查询处理:
<mapper namespace="com.sw.dao.StudentMapper">
<select id="findStudent" resultMap="StudentTeacher">
select * from student;
</select>
<resultMap id="StudentTeacher" type="Student">
<result property="id" column="id"/>
<result property="name" column="name"/>
<!--复杂属性需要单独处理 对象:association 集合:collection
-->
<association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/>
</resultMap>
<select id="getTeacher" resultType="Teacher">
select * from teacher where id = #{id};
</select>
</mapper>
按照结果嵌套处理:
<!--按结果集嵌套处理-->
<select id="findStudent2" resultMap="StudentTeacher2">
select s.id sid,s.name sname,t.name tname
from student s,teacher t
where s.tid = t.id;
</select>
<resultMap id="StudentTeacher2" type="Student">
<result property="id" column="sid"/>
<result property="name" column="sname"/>
<association property="teacher" javaType="Teacher">
<result property="name" column="tname"/>
</association>
</resultMap>
评论 (0)