首页 > 代码库 > Mybatis学习笔记-一对一关联

Mybatis学习笔记-一对一关联

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;
	//...
}

wKiom1QovRrTaxgkAAA2O0uTmv4446.jpg

wKioL1QovUTw3I78AAAkbdjMeLE291.jpg

第一种方式

<!-- 
方式一:嵌套结果:使用嵌套结果映射来处理重复的联合结果的子集
         封装联表查询的数据(去除重复的数据)
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

Mybatis学习笔记-一对一关联