mybatis查询

mybatis一对一联合查询

需求:现有表t_fee(id,channel_id,amount),其中channel_id是外键,与表t_channel(id,name)的主键id对应,一对一的关系,需要查询fee表的同时也得到对应channel中的记录
步骤:

  1. 表t_fee的实体类com.business.entity.Fee添加一个属性channel,类型是表t_channel的实体类
com.business.entity.Channel
package com.business.entity;
import java.math.BigDecimal;
import java.util.Date;
public class Fee {
    private Integer id;

    private Long channelId;

    private BigDecimal amount;

    private String copyWriter;
    
    //额外属性
    private RepayChannel repayChannel;

    //getter and setter
}

虽然现在fee的实体类和表没有完全一致,但是不会引起错误

  1. 在FeeMapper.xml定义一个FeeMap,接收t_fee字段和t_channel字段的resultMap
    (1)extends="BaseResultMap" :FeeMap只是在BaseResultMap的基础上加上channel的属性,不需要再写一遍t_fee的列名
    (2)加上
    property表示t_channel的属性在t_fee实体类中对应的变量名
    column表示t_channel的主键在t_fee中的列名
    select表示根据t_fee的channel_id查询t_channel的记录。
  2. 编写selectChannel,根据fee的channel_id查询channel。代码里只查询了channel的name字段
    注意:要加上distinct,以确保最多返回一条数据,否则报错:

Statement returned more than one row, where no more than one was expected.

  1. 最后的接口selectFee,只需要注意把resultMap改为FeeMap



  
    
    
    
    
  
  
    id, channel_id, amount, copy_writer
  
  
    
  
    
  

mybatis一对多联合查询

1、主表t_a,实体类com.A,关联表t_b,实体类com.B,t_a对t_b是1:n
在实体类A中加入B的属性:

private List bList;
// getter and setter

新建一个resultMap,继承A的BaseResultMap,加入collection
column是列名,不一定是表的列名,它是对应sql语句查出记录的结果的列名
property是在实体类中的属性名称

  
    
    



如果查询结果有两张表的相同列名name,则将会是A.name、B.name,可以在collection 属性加入columnPrefix="B."

你可能感兴趣的:(mybatis查询)