MyBatis 关联查询的实现:使用关联结果实现一对一

 

有2个实体:用户、会员卡,一个用户只能办理一张会员卡,即一对一。

 

user_tb : 

MyBatis 关联查询的实现:使用关联结果实现一对一_第1张图片

 需要在一方引入另一方的主键作为外键。

 

 

card_tb:

 

 


 

 

 

使用嵌套结果实现一对一

(一)编写2个“一”的pojo类

package com.chy.pojo;

public class Card {
    private Integer no;  //会员卡编号
    private Float money;  //余额

    public Integer getNo() {
        return no;
    }

    public void setNo(Integer no) {
        this.no = no;
    }

    public Float getMoney() {
        return money;
    }

    public void setMoney(Float money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Card{" +
                "no=" + no +
                ", money=" + money +
                '}';
    }
}

 

package com.chy.pojo;

public class User {
    private Integer id;  //主键
    private String name;  //姓名
    private String tel;  //手机号
    private String address;  //地址
    private Card card;  //与之关联的Card

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Card getCard() {
        return card;
    }

    public void setCard(Card card) {
        this.card = card;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", tel='" + tel + '\'' +
                ", address='" + address + '\'' +
                ", card=" + card +
                '}';
    }
}

 

谁关联谁,需要根据业务来确定,可以彼此关联对方。

外键用于辅助sql操作,不是实体的属性,不要在pojo类中把外键字段作为属性(成员变量)。

 

 

(二)编写UserMapper接口、UserMapper.xml

package com.chy.mapper;

import com.chy.pojo.User;

public interface UserMapper {
    public User queryUserById(Integer id);
}

 


DOCTYPE mapper  PUBLIC
        "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    
    
        
        
        
        
        
            
            
        
    

因为是一次查询,所以要选取所有需要的数据。

指定与之关联的实体的映射。

  • property属性指定当前pojo类中表示另一方的成员变量名
  • javaType指定对方的数据类型

 

 

(三)使用

package com.chy.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;

public class MyBatisUtils {
    private static SqlSessionFactory sqlSessionFactory;

    static {
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

 

package com.chy.test;

import com.chy.mapper.UserMapper;
import com.chy.pojo.User;
import com.chy.utils.MyBatisUtils;
import org.apache.ibatis.session.*;

public class Test {
    public static void main(String[] args) {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.queryUserById(1);
        System.out.println(user);
        sqlSession.close();
    }
}

你可能感兴趣的:(MyBatis 关联查询的实现:使用关联结果实现一对一)