MyBatis的一对一关联关系映射

原文链接:http://www.yiidian.com/mybatis/one-to-one.html

1 什么是一对一、一对多映射?

以用户和订单举例,

一对一 : 一个订单只属于一个用户 ==> 订单对用户是一对一关系

一对多 : 一个用户可以拥有多个订单 ==> 用户对订单是一对多关系

注意:在MyBatis中,如果要完成多对多关系,其实就是两个一对多映射!

接下来先讲解MyBatis的一对一映射如何实现。

2 建立表结构

2.1 创建用户表

CREATE TABLE `t_user` (
   `id` int(11) DEFAULT NULL,
   `username` varchar(50) DEFAULT NULL,
   `password` varchar(50) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

2.2 创建订单表

CREATE TABLE `t_order` (
   `id` int(11) DEFAULT NULL,
   `orderno` varchar(100) DEFAULT NULL,
   `amount` double DEFAULT NULL,
   `user_id` int(11) DEFAULT NULL
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8

2.3 插入测试数据

file
file

3 设计Pojo实体,建立关系

3.1 用户实体类

package com.yiidian.domain;

import java.util.List;

/**
 * 用户实体
 * 一点教程网 - www.yiidian.com
 */
public class User {
    private Integer id;
    private String username;
  
    public void setOrders(List orders) {
        this.orders = orders;
    }

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

3.2 订单实体类

package com.yiidian.domain;

/**
 * 订单实体
 * 一点教程网 - www.yiidian.com
 */
public class Order {
    private Integer id;
    private String orderno;
    private Double amount;
    private User user;

    public Integer getId() {
        return id;
    }

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

    public String getOrderno() {
        return orderno;
    }

    public void setOrderno(String orderno) {
        this.orderno = orderno;
    }

    public Double getAmount() {
        return amount;
    }

    public void setAmount(Double amount) {
        this.amount = amount;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

Order实体类,通过user属性建立跟User实体的关系。注意,这里是一个User。

4 编写Dao接口

4.1 UserDao接口

package com.yiidian.dao;

import com.yiidian.domain.User;

import java.util.List;

/**
 * 用户Dao接口
 * 一点教程网 - www.yiidian.com
 */
public interface UserDao {

}

4.2 OrderDao接口

package com.yiidian.dao;
import com.yiidian.domain.Order;
import com.yiidian.domain.User;
import java.util.List;

/**
 * 订单Dao接口
 * 一点教程网 - www.yiidian.com
 */
public interface OrderDao {
    /**
     * 查询所有订单
     */
    public List findAllOrders();
}

5 编写Dao映射配置

5.1 UserDao.xml配置







5.2 OrderDao.xml配置






    
    
        
        
        
        
        
            
            
            
        
    

    

  • association:用在一对一关联映射
  • property:对应Order类的user属性
  • column:对应外键字段名称
  • javaType:User类的全限定名称

6 编写测试类

package com.yiidian.mybatis;

import com.yiidian.dao.OrderDao;
import com.yiidian.domain.Order;
import com.yiidian.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * MyBatis测试类 - 一对一映射
 * 一点教程网 - www.yiidian.com
 */
public class TestOne2One {

    /**
     * 测试一对一映射
     */
    @Test
    public void testOrderDao(){
        //1.获取SqlSession对象
        SqlSession sqlSession = MyBatisUtils.getSession();

        //2.创建Mapper代理对象
        OrderDao orderDao = sqlSession.getMapper(OrderDao.class);

        //3.调用方法
        List list = orderDao.findAllOrders();
        System.out.println(list);
        //4.关闭连接
        sqlSession.close();
    }

}

7 运行测试类

以debug模式启动测试类,查看list变量的情况,可以看到Order对象中成功封装了User对象的数据!

file
file

源码下载:https://pan.baidu.com/s/1jZrfapjqB_VHI_GLgKPo4g

file

欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。
如果您对我的系列教程感兴趣,也可以关注我的网站:yiidian.com

你可能感兴趣的:(MyBatis的一对一关联关系映射)