您的位置:首页 > 其它

Mybatis学习笔记-一对一关联

2014-09-29 10:01 357 查看
Teacher.java实体类 。 对应数据库teacher表
public class Teacher {
private int id;
private String name;
//...
}


Classes.java实体类 。 对应数据库class表
public class Classes {
private int id;
private String name;
private Teacher teacher;
//...
}







第一种方式

<!--
方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
封装联表查询的数据(去除重复的数据)
select * from class c, teacher t where c.teacher_id=t.t_id and  c.c_id=1
-->
<select id="getClass" parameterType="int" resultMap="ClassResultMap">
select * from class c, teacher t where c.teacher_id=t.t_id and  c.c_id=#{id}
</select>
<resultMap type="com.mybatis.test03.Classes" id="ClassResultMap">
<id property="id" column="c_id"/>
<result property="name" column="c_name"/>
<association property="teacher" javaType="com.mybatis.test03.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="com.mybatis.test03.Classes" id="ClassResultMap2">
<id property="id" column="c_id" />
<result property="name" column="c_name" />
<association property="teacher" column="teacher_id"
select="getTeacher"><!-- 映射到后面的getTeacher -->
</association>
</resultMap>
<select id="getTeacher" parameterType="int" resultType="com.mybatis.test03.Teacher">
SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
</select>


association 用于一对一的关联查询
property 对象属性的名称
javaType 对象属性的类型
column 所对应的外键字段的名称
select 使用另一个查询封装的结果

本文出自 “优赛工作室” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1559266
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: