Mybatis--多表之间的关联映射(五)

(一)关联关系概述

这里写图片描述这里写图片描述这里写图片描述

(二)一对一实例演示

项目文件结构图

这里写图片描述这里写图片描述

01创建t_idcard和t_person数据表

CREATE TABLE `t_idcard` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `t_idcard` VALUES ('1', '4319090909090');
INSERT INTO `t_idcard` VALUES ('2', '4301919191919191');


----------
CREATE TABLE `t_person` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `card_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `id_card` (`card_id`),
  CONSTRAINT `t_person_ibfk_1` FOREIGN KEY (`card_id`) REFERENCES `t_idcard` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
INSERT INTO `t_person` VALUES ('1', '张三', '1');
INSERT INTO `t_person` VALUES ('2', '李四', '2');

02.创建表对应的 JavaBean 对象

IdCard.java类的代码如下:

package com.wang.po;
public class IdCard {
    private int id;
    private String code;
    ----省略setter和getter----
    @Override
    public String toString() {
        return "IdCard [id=" + id + ", code=" + code + "]";
    }

}

Person.java类的代码如下:

package com.wang.po;

public class Person {

    private int id;
    private String name;
    private IdCard card;
    ----省略setter和getter---- 
    @Override
    public String toString() {
        return "Person [id=" + id + ", name=" + name + ", card=" + card + "]";
    }

}

03.在Mapper.xml编写SQL语句

IdCardMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace+id确定一条SQL语句 -->
<mapper namespace="com.wang.mapper.IdCardMapper">
    <select id="findCodeById" parameterType="Integer"
        resultType="com.wang.po.IdCard">
        select*from t_idcard where id=#{id}
    </select>

</mapper>

PersonMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace+id确定一条SQL语句 -->
<mapper namespace="com.wang.mapper.PersonMapper">
    <select id="findPersonById" parameterType="Integer"
        resultMap="IdCardWithPersonResult">
        select*from t_person where id=#{id}
    </select>
    <resultMap type="com.wang.po.Person" id="IdCardWithPersonResult">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <association property="card" column="card_id" 
           javaType="com.wang.po.IdCard"
           select="com.wang.mapper.IdCardMapper.findCodeById"/>
    </resultMap>
</mapper>

04.测试程序运行

package com.wang.Test;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.wang.Utils.MybatisUtils;
import com.wang.po.Person;
public class MybatisTest {

    @Test
    public void findCustomerByName() {
        SqlSession sqlSession = MybatisUtils.getSession();
        Person p=sqlSession.selectOne("com.wang.mapper.PersonMapper.findPersonById",1);
        System.out.println(p);
        sqlSession.close();
    }
}

05.结果

DEBUG [main] - ==>  Preparing: select*from t_person where id=? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - ====>  Preparing: select*from t_idcard where id=? 
DEBUG [main] - ====> Parameters: 1(Integer)
DEBUG [main] - <====      Total: 1
DEBUG [main] - <==      Total: 1
Person [id=1, name=张三, card=IdCard [id=1, code=4319090909090]]

猜你喜欢

转载自blog.csdn.net/weixin_36279318/article/details/80049580