mybatis高级映射之一对一映射

mybatis中一对一的映射方式有两种,一种是使用returnType映射,自定义pojo类来自动封装查询的数据;一种是使用returnMap将查询的数据封装到一个pojo中。

下面从一个简单的demo中来学习这两种映射方式
需求:demo一共两个表,一个用户表,一个订单表,它们是一对一的关系,我们只需要将两个表中的数据查询出来并封装到一个pojo中。

注意 :在编写代码的时候我们使用的是mapper代理的方式(即不需要写具体的dao实现),所以我们需要遵守mapper代理的规则(mapper代理规则)

一 使用returnType

步骤

  1. 建表(t_user和t_order)
  2. 创建userorder对应的实体类
public class Order {
    private Integer id;
    private String number;
}
public class User {
    private Integer id;
    private String name;
}
  1. 自定义pojo类,该类主要用于接收查询后数据。
//通过映射订单和用户得到的结果,让此类尽量继承字段较多的pojo
public class OrderCustom extends Order {
    private String name;//用户的名称

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. 创建对应的mappermapper.xml,并在mybatis.xml中引入mapper.xml
  2. 测试

二 使用returnMap

步骤

  1. 建表userorder
  2. 创建userorder对应的实体类
public class Order {
    private Integer id;
    private String number;
    private Integer userId;
    private User user;
}
public class User {
    private Integer id;
    private String name;
}
  1. 编写mapper.xml


    
    
        
        
        
        
        
        
            
            
            
        
    
    
  

  1. 编写mapper以及在mybatis.xml引入mapper.xml
    5.测试

总结
两种方式都可以实现一对一的映射,但

  • resultType相对来说比较简单,如果没有特殊要求,比如需要实现缓存(resultType不能实现缓存),在一对一映射中,我们一般采用该方式进行映射。
  • resultMap:使用resultMap我们需要定义单独的resultMap,一般在一对多的映射中使用。

demo代码地址(5和6)

你可能感兴趣的:(mybatis高级映射之一对一映射)