MyBatis-一对一关联表查询 -05
2015-05-27 15:14
363 查看
一、一对一的关联表查询
假设一个老师对应一个班级的情况
班级表
CREATE TABLE class(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
teacher_id INT
);
教师表
CREATE TABLE teacher(
t_id INT PRIMARY KEY AUTO_INCREMENT,
t_name VARCHAR(20)
);
班级类
package com.weixuan.mybatis.bean;
public class Classes {
private int id;
private String name;
private Teacher teacher;
@Override
public String toString() {
return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher
+ "]";
}
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 Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public Classes(int id, String name, Teacher teacher) {
super();
this.id = id;
this.name = name;
this.teacher = teacher;
}
public Classes() {
super();
}
}
教师类
package com.weixuan.mybatis.bean;
public class Teacher {
private int id;
private String name;
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;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
public Teacher(int id, String name) {
super();
this.id = id;
this.name = name;
}
public Teacher() {
super();
}
}
二、两种实现子查询的方式
方式一
<!-- 方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集 封装联表查询的数据(去除重复的数据) -->
<select id="getClass" parameterType="int" resultMap="GetClassOne2One">
select *
from class c, teacher t where c.teacher_id=t.t_id and c.c_id= #{id}
</select>
<resultMap type="Classes" id="GetClassOne2One">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" javaType="Teacher">
<id property="id" column="t_id" />
<result property="name" column="t_name" />
</association>
</resultMap>
方式二
<!-- 方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型 SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值 -->
<select id="getClass2" parameterType="int" resultMap="ClassResultMap2">
select * from class where c_id=#{id}
</select>
<resultMap type="_Classes" id="ClassResultMap2">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" column="teacher_id"
select="getTeacher">
</association>
</resultMap>
<select id="getTeacher" parameterType="int" resultType="_Teacher">
SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
</select>
三、标签总结
association ----> 用于一对一的关联查询
property ----> 对象属性的名称
javaType ----> 对象属性的类型
column ----> 所对应的外键的字段名称或者实体类成员在数据库表中的对应字段名
select ----> 使用另一个查询封装的结果
假设一个老师对应一个班级的情况
班级表
CREATE TABLE class(
c_id INT PRIMARY KEY AUTO_INCREMENT,
c_name VARCHAR(20),
teacher_id INT
);
教师表
CREATE TABLE teacher(
t_id INT PRIMARY KEY AUTO_INCREMENT,
t_name VARCHAR(20)
);
班级类
package com.weixuan.mybatis.bean;
public class Classes {
private int id;
private String name;
private Teacher teacher;
@Override
public String toString() {
return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher
+ "]";
}
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 Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public Classes(int id, String name, Teacher teacher) {
super();
this.id = id;
this.name = name;
this.teacher = teacher;
}
public Classes() {
super();
}
}
教师类
package com.weixuan.mybatis.bean;
public class Teacher {
private int id;
private String name;
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;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
public Teacher(int id, String name) {
super();
this.id = id;
this.name = name;
}
public Teacher() {
super();
}
}
二、两种实现子查询的方式
方式一
<!-- 方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集 封装联表查询的数据(去除重复的数据) -->
<select id="getClass" parameterType="int" resultMap="GetClassOne2One">
select *
from class c, teacher t where c.teacher_id=t.t_id and c.c_id= #{id}
</select>
<resultMap type="Classes" id="GetClassOne2One">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" javaType="Teacher">
<id property="id" column="t_id" />
<result property="name" column="t_name" />
</association>
</resultMap>
方式二
<!-- 方式二:嵌套查询:通过执行另外一个SQL映射语句来返回预期的复杂类型 SELECT * FROM class WHERE c_id=1;
SELECT * FROM teacher WHERE t_id=1 //1 是上一个查询得到的teacher_id的值 -->
<select id="getClass2" parameterType="int" resultMap="ClassResultMap2">
select * from class where c_id=#{id}
</select>
<resultMap type="_Classes" id="ClassResultMap2">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" column="teacher_id"
select="getTeacher">
</association>
</resultMap>
<select id="getTeacher" parameterType="int" resultType="_Teacher">
SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
</select>
三、标签总结
association ----> 用于一对一的关联查询
property ----> 对象属性的名称
javaType ----> 对象属性的类型
column ----> 所对应的外键的字段名称或者实体类成员在数据库表中的对应字段名
select ----> 使用另一个查询封装的结果
相关文章推荐
- MyBatis笔记05 - 一对一关联查询
- MyBatis一对一关联查询总结(四)
- MyBatis(三)---实现一对一和一对多的关联表查询
- 05_一对一关联表查询:有二种方式
- mybatis一对一关联查询无法查出关联对象的数据的解决
- Mybatis---一对一关联表查询
- mybatis一对一关联查询无法查出关联对象的数据的解决
- mybatis学习笔记(九)一对一关联表查询
- mybatis一对一关联查询无法查出关联对象的数据的解决
- MyBatis学习总结_05_实现关联表查询
- Mybatis 一对一 关联查询 与 resultMap
- myBatis 中查询多表数据时使用association处理一对一关联
- Mybatis中一对一关联查询resultMap
- MyBatis 一对一关联查询
- MyBatis一对一关联表查询
- Mybatis一对一、一对多关联查询
- MyBatis中一对一关联查询
- 5、Mybatis实现一对一关联表查询
- mybatis一对一关联表查询