Mybatis第三讲——关联一对一 (1)
这讲主要是针对两张表,一张学生信息表t_student,一张地址表t_address:
t_student中的addressId字段对应于t_address中的id,但是两张表之间并没有物理上的关联。我们只是人为的把字段添加上去了而已。
工程结构:
与第二讲相比,增加了model下的Address.java 文件:
package com.java1234.model;
public class Address {
private Integer id;
private String sheng;
private String shi;
private String qu;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getSheng() {
return sheng;
}
public void setSheng(String sheng) {
this.sheng = sheng;
}
public String getShi() {
return shi;
}
public void setShi(String shi) {
this.shi = shi;
}
public String getQu() {
return qu;
}
public void setQu(String qu) {
this.qu = qu;
}
@Override
public String toString() {
return "Address [id=" + id + ", sheng=" + sheng + ", shi=" + shi + ", qu=" + qu + "]";
}
}
StudentMapper.java中新增接口:
StudentMapper.xml中新增如下代码段:
<resultMap type="Address" id="addressResult">
<result property="id" column="id"/>
<result property="sheng" column="sheng"/>
<result property="shi" column="shi"/>
<result property="qu" column="qu"/>
</resultMap>
<resultMap type="Student" id="StudentResult">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<!-- <result property="address.id" column="addressId"/>
<result property="address.sheng" column="sheng"/>
<result property="address.shi" column="shi"/>
<result property="address.qu" column="qu"/> -->
<association property="address" resultMap="addressResult"/>
</resultMap>
<select id="getAllStudents" resultMap="StudentResult">
select * from t_student
</select>
<select id="findStudentWithAddress" resultMap="StudentResult" parameterType="Integer">
select * from t_student t1,t_address t2 where t1.addressId=t2.id and t2.id=#{id}
</select>
测试:
输出结果: