Mybatis学习笔记-一对多关联
2014-09-29 10:12
405 查看
需求:根据classId查询对应的班级信息,包括学生,老师
Student实体类
Classes 实体类
Student实体类
方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id}
方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值
SELECT * FROM student WHERE class_id=1 //1是第一个查询得到的c_id字段的值
collection 一对多关联
ofType 指定集合中元素对象的类型
附:建表语句
本文出自 “优赛工作室” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1559272
Student实体类
public class Student { private int id; private String name; //... }
Classes 实体类
public class Classes { private int id; private String name; private Teacher teacher; private List<Student> students; //... }
Student实体类
public class Student { private int id; private String name; //... }
方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id}
<select id="getClass" parameterType="int" resultMap="ClassResultMap3"> select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.c_id=s.class_id and c.c_id=#{id} </select> <resultMap type="com.mybatis.test04.Classes" id="ClassResultMap3"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" column="teacher_id" javaType="com.mybatis.test04.Teacher"> <id property="id" column="t_id"/> <result property="name" column="t_name"/> </association> <!-- ofType指定students集合中的对象类型 --> <collection property="students" ofType="com.mybatis.test04.Student"> <id property="id" column="s_id"/> <result property="name" column="s_name"/> </collection> </resultMap>
方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型
SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值
SELECT * FROM student WHERE class_id=1 //1是第一个查询得到的c_id字段的值
<select id="getClass2" resultMap="getClass2Map"> select * from class where c_id=#{id} </select> <select id="getTeacher" resultType="com.mybatis.test04.Teacher"> select t_id id, t_name name from teacher where t_id=#{id} </select> <select id="getStudent" resultType="com.mybatis.test04.Student"> select s_id id, s_name name from student where class_id=#{id} </select> <resultMap type="com.mybatis.test04.Classes" id="getClass2Map"> <id property="id" column="c_id"/> <result property="name" column="c_name"/> <association property="teacher" column="teacher_id" select="getTeacher"></association> <collection property="students" column="c_id" select="getStudent"></collection> </resultMap>
collection 一对多关联
ofType 指定集合中元素对象的类型
附:建表语句
DROP TABLE IF EXISTS `teacher`; CREATE TABLE `teacher` ( `t_id` int(11) NOT NULL auto_increment, `t_name` varchar(20) default NULL, PRIMARY KEY (`t_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO `teacher` VALUES ('1', '孔子'); INSERT INTO `teacher` VALUES ('2', '孟子'); DROP TABLE IF EXISTS `class`; CREATE TABLE `class` ( `c_id` int(11) NOT NULL auto_increment, `c_name` varchar(20) default NULL, `teacher_id` int(11) default NULL, PRIMARY KEY (`c_id`), KEY `fk_teacher_id` (`teacher_id`), CONSTRAINT `fk_teacher_id` FOREIGN KEY (`teacher_id`) REFERENCES `teacher` (`t_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO `class` VALUES ('1', '1121班', '1'); INSERT INTO `class` VALUES ('2', '1122班', '2'); DROP TABLE IF EXISTS `student`; CREATE TABLE `student` ( `s_id` int(11) NOT NULL auto_increment, `s_name` varchar(20) default NULL, `class_id` int(11) default NULL, PRIMARY KEY (`s_id`) ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; INSERT INTO `student` VALUES ('1', '张三', '1'); INSERT INTO `student` VALUES ('2', '李四', '1'); INSERT INTO `student` VALUES ('3', '王五', '1'); INSERT INTO `student` VALUES ('4', 'Tom', '2'); INSERT INTO `student` VALUES ('5', 'Jack', '2'); INSERT INTO `student` VALUES ('6', 'Robert', '2');
本文出自 “优赛工作室” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1559272
相关文章推荐
- mybatis学习笔记(四) --- 一对一关联
- MyBatis学习笔记(五)——实现关联表查询
- Mybatis学习笔记-关联表查询的问题 (一对多关联)
- Mybatis学习笔记-一对一关联
- Mybatis学习笔记-关联表查询的问题
- Mybatis学习笔记(6)--一对一的关联使用resultType输出类型
- 表一对一关联([尚硅谷]_张晓飞_Mybatis 学习笔记三)
- 关联查询---Mybatis学习笔记(九)
- mybatis学习笔记(九)一对一关联表查询
- 【Mybatis学习笔记】系列之二:Mybatis双项一对多关联
- MyBatis一对多双向关联——MyBatis学习笔记之七
- MyBatis学习笔记:一对一和一对多关联表查询
- mybatis学习笔记三(实现关联数据的查询)
- Mybatis学习笔记(8)--一对多的关联使用resultMap输出类型
- Mybatis学习笔记:(二) java中的实体(对象、List、Set)关系怎样与数据库关联映射
- Mybatis学习笔记-一对一关联
- Mybatis学习笔记-一对多关联
- MyBatis学习笔记(四)---关联数据的查询
- 【MyBatis学习笔记】系列之一:MyBatis多对多双向关联
- mybatis学习笔记三(实现关联数据的查询)