zoukankan      html  css  js  c++  java
  • mybatis 一对一关联映射实例

    在实际项目开发中,经常存在一对一的关系,如一个人对应一张身份证信息,这就是一对一的关系。下面是一个简单的实例:

    1、建表过程我就省略了,主要是一张Person表,一张IDCard表,其相关属性见步骤2Pojo类属性所示;

    2、建立一个Person对象和一个IDCard对象:

      mybatis/pri/xiaoyang/otot/pojo/IDCard.java

    1 public class IDCard implements Serializable {
    2     private int id; // 主键
    3     private String cardCode; // 身份证编号
    4     private String carAddress; // 身份证地址
    5     //构造函数及Getter/Setter/toString...
    6 }


             mybatis/pri/xiaoyang/otot/pojo/Person.java

    1 public class Person implements Serializable {
    2     private int id; // 主键
    3     private String name; // 姓名
    4     private String sex; // 性别
    5     private IDCard iDCard; //身份证对象,人和身份证一对一关系
    6     //构造函数及Getter/Setter/toString...
    7 }

    3、接下来是XML映射文件:

       mybatis/pri/xiaoyang/otot/mapper/IDCardMapper.xml

    <mapper namespace="pri.xiaoyang.otot.mapper.IDCardMapper">
      <!-- 根据主键查询IDCard信息,封装为IDCard对象并返回 -->
        <select id="selectIDCardById" pamaeterType="int" resultType="pri.xiaoyang.otot.pojo.IDCard">
            select * from idcard where id = #{id}
        </select>
    </mapper>

      mybatis/pri/xiaoyang/otot/mapper/PersonMapper.xml

    <mapper namespace="pri.xiaoyang.otot.mapper.PersonMapper">
        <!-- 根据person主键查询Person信息,封装为Person对象并返回 -->
        <select id="selectPersonById" pamaeterType="int" resultMap="PersonMapper">
            select * from person where id = #{id}
        </select>
        
        <!-- 映射Person对象的resultMap -->
        <resultMap type="pri.xiaoyang.otot.pojo.Person" id="PersonMapper">
            <id property="id" column="id" />
            <result property="name" column="name" />
            <result property="sex" column="sex" />
            <!-- 一对一关联映射:association  -->
            <association property="iDCard" column="card_id" 
                select="pri.xiaoyang.otot.mapper.IDCardMapper.selectIDCardById"
                javaType="pri.xiaoyang.otot.pojo.IDCard"/>
        </resultMap >
    </mapper>

     注: 在PersonMapper.xml中定义了一个<select/>标签,该标签的sql语句是根据Person表的主键字段来查询出唯一的Person信息,由于该Person表和IDCard表关联,因此返回一个resultMap值为personMap的映射对象。personMap使用了<association/>标签映射了一对一的关联关系,其标签内的属性select表示会以column的属性值"card_id"来作为参数执行IDCardMapper中定义的selectIDCardById查询对应的IDCard数据,查询出的数据会被封装到property属性值的“card”对象中。

  • 相关阅读:
    想不赚钱都难的7大行业
    [转帖]一位年轻商人的经验感悟
    对待下级十二条准则
    让自己幸福的10条秘诀
    孤独感
    “3+3”看华为云FusionInsight如何引领“数据新基建”持续发展
    【乘风破浪的开发者】丁一超:从AI实战营出发探索未知的AI世界
    适用初学者的5种Python数据输入技术
    遥感影像处理有高招,“专治”各类花式并发的述求!
    从“小众”到“首选”,推动云原生产业落地华为云作用几何?
  • 原文地址:https://www.cnblogs.com/tanshaoxiaoji/p/mybatis_oneTOone.html
Copyright © 2011-2022 走看看