一对一是特殊的多对一
1 从人员表的这一端看:
配置文件:
<resultMap type="person" id="selectIdCardByPersonIdRM" extends="BaseResultMap">
<association property="ic" javaType="com.rl.model1.IdCard">
<id column="PERSON_ID" property="personId" jdbcType="INTEGER" />
<result column="CARD_NO" property="cardNo" jdbcType="VARCHAR" />
</association>
</resultMap>
<select id="selectIdCardByPersonId" parameterType="int" resultMap="selectIdCardByPersonIdRM">
select * from person p, id_card ic
where p.PERSON_ID = ic.PERSON_ID and p.PERSON_ID = #{personId}
</select>
测试代码:
@Test
public void test() {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
Person person = sqlSession.selectOne("com.rl.mapper.PersonMapper.selectIdCardByPersonId", 1);
System.out.println(person);
} finally{
sqlSession.close();
}
}
2 从身份证表这一端看:
配置文件:
<resultMap type="ic" id="selectPersonByIdCardRM" extends="BaseResultMap">
<association property="person" javaType="person">
<id column="person_id" property="personId"/>
<result column="name" property="name"/>
<result column="gender" property="gender"/>
<result column="person_addr" property="personAddr"/>
<result column="birthday" property="birthday"/>
</association>
</resultMap>
<select id="selectPersonByIdCard" parameterType="int" resultMap="selectPersonByIdCardRM">
select * from person p, id_card ic
where p.PERSON_ID = ic.PERSON_ID and p.PERSON_ID = 1
</select>
测试代码:
@Test
public void test1() {
SqlSession sqlSession = sqlSessionFactory.openSession();
try {
IdCard ic = sqlSession.selectOne("com.rl.mapper.IdCardMapper.selectPersonByIdCard", 1);
System.out.println(ic);
} finally{
sqlSession.close();
}
}
再次提醒: 一定要记得将"IdCardMapper.xml"配置文件加入"sqlMapConfig.xml"中管理, 我就吃过这个亏