一对一是一种特殊的多对一。
一般箭头所指的方向,是一,背对箭头的是多。
由于身份证表的人员编号即使主键也是外键,所以这是一对一的关系。pk是主键,fk是外键。
在Person.java类中添加一行 private IdCard ic; 并生成setter getter。
xml在PersonMapper中写
<!-- 一对一查询 association:一对一和多对一的时候用 property:多对一中“一”的那个属性名 javaType:property中那个变量的数据类型 --> <resultMap type="xxx.x.Person" id="selectIdCardByPersonIdRM" extends="BaseResultMap"> <association property="ic" javaType="xxx.x.model.IdCard"> <id column = "person_id" property = "personId" /> <result column = "card_no" property = "cardNo" /> </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>
SqlSessionFactory sessionFactory; public void setUp() throws Exception { InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml"); sessionFactory = new SqlSessionFactoryBuilder().build(in); } public void selectIdCardByPersonId() { // 创建SqlSession SqlSession session = sessionFactory.openSession(); try { Person person = session.selectOne("xxx.x.mapper.OrdersMapper.selectIdCardByPersonId", 1); System.out.println(person); } catch (Exception e) { e.printStackTrace(); session.rollback(); } finally { session.close(); } }
都和多对一一样