MyBatis的关联映射

目录

一、创建项目

二、导入依赖 

三、 创建包等文件

1.一对一查询 

1.1 数据库准备

1.2 实体类 

 IdCard.java

Person.java

1.3用户配置接口

IdCardMapper.java

PersonMapper.java

1.4 用户配置文件

 IdCardMapper.xml

PersonMapper.xml

1.5嵌套查询方式 

IdCardMapper.java添加

PersonMapper.java添加

IdCardMapper.xml添加

PersonMapper.xml添加

 PersonTest.java

1.6嵌套结果方式

 PersonMapper.java 添加

PersonMapper.xml添加

PersonTest.java添加


 

一、创建项目

二、导入依赖 

  <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.18</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
    </dependencies>

三、 创建包等文件

1.一对一查询 

1.1 数据库准备

USE mybatis;
CREATE TABLE  tb_idcard( 
     id INT PRIMARY KEY AUTO_INCREMENT,
     CODE VARCHAR(18));
INSERT INTO tb_idcard(CODE) VALUES('152221198711020624');
INSERT INTO tb_idcard(CODE) VALUES('152201199008150317');
CREATE TABLE  tb_person( 
     id INT PRIMARY KEY AUTO_INCREMENT,
     name VARCHAR(32),
     age INT,
     sex VARCHAR(8),
     card_id INT UNIQUE,     
     FOREIGN KEY(card_id) REFERENCES tb_idcard(id));

INSERT INTO tb_person(name,age,sex,card_id) VALUES('Rose',22,'女',1);
INSERT INTO tb_person(name,age,sex,card_id) VALUES('jack',23,'男',2);

1.2 实体类 

 IdCard.java

package com.biem.pojo;

import lombok.*;

@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class IdCard {
    private Integer id;
    private String code;
}

Person.java

package com.biem.pojo;

import lombok.*;

@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private Integer id;
    private String name;
    private Integer age;
    private String sex;
    private IdCard card;
}

1.3用户配置接口

IdCardMapper.java

package com.biem.mapper;

public interface IdCardMapper{
}

PersonMapper.java

package com.biem.mapper;

public interface PersonMapper {
}

1.4 用户配置文件

 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">
<mapper namespace="com.biem.mapper.IdCardMapper">


</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">
<mapper namespace="com.biem.mapper.PersonMapper">


</mapper>

1.5嵌套查询方式 

IdCardMapper.java添加

public IdCard findCodeById(Integer id);

PersonMapper.java添加

public Person findPersonById(Integer id);

IdCardMapper.xml添加

<select id="findCodeById" parameterType="Integer" resultType="IdCard">
        select * from tb_idcard where id=#{id}
</select>

PersonMapper.xml添加

<resultMap id="IdCardWithPersonResult" type="Person">
        <id property="id" column="id"></id>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <result property="sex" column="sex"/>
        <association property="card" column="card_id" javaType="IdCard"
                     select="com.biem.mapper.IdCardMapper.findCodeById"/>
 </resultMap>

 <select id="findPersonById" parameterType="Integer" resultMap="IdCardWithPersonResult">
        select * from tb_person where id = #{id}
 </select>

 PersonTest.java

package com.biem.test;

import com.biem.mapper.PersonMapper;
import com.biem.pojo.Person;
import com.biem.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class PersoTest {
        @Test
        public void testFindPersonById(){
            SqlSession session = MybatisUtil.openSession();
            PersonMapper mapper = session.getMapper(PersonMapper.class);
            Person person = mapper.findPersonById(1);
            System.out.println(person);
            session.close();
        }
    }

运行结果:

 

1.6嵌套结果方式

 PersonMapper.java 添加

public Person findPersonByIdWithNestedResults(Integer id);

PersonMapper.xml添加

    <resultMap id="IdCardWithPersonResult2" type="Person">
        <id property="id" column="id"></id>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <result property="sex" column="sex"/>

        <association property="card" javaType="IdCard">
            <id property="id" column="card_id"></id>
            <result property="code" column="code"></result>
        </association>
    </resultMap>
    <select id="findPersonByIdWithNestedResults" parameterType="Integer" resultMap="IdCardWithPersonResult">
        select p.*, idcard.code
        from tb_person p, tb_idcard idcard
        where p.card_id = idcard.id and p.id = #{id}
    </select>

PersonTest.java添加

    @Test
    public void testFindPersonByIdWithNestedResults(){
        SqlSession session = MyBatisUtil.openSession();
        PersonMapper mapper = session.getMapper(PersonMapper.class);
        Person person = mapper.findPersonByIdWithNestedResults(1);
        System.out.println(person);
        session.close();
    }

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值