Mybatis的多表查询

那么有时候我们会有需求,联合两个表去进行查询。本次讲解Mybatis如何实现多表查询。

在讲多表查询的时候,我们要先引入一个知识点 resultMap标签,它可以解决:

  1. java属性名称与数据库中的字段不一致
  2. 多表查询

具体用法结合结合下边的例子进行理解。

当直接引入一个对象的时候:

  • property:表示java对象的属性,也就是我们的类中定义的属性
  • column: 和前边属性对应映射的 数据库中的字段。
  • id一列表示这个字段属性为主键
  • association一列表示引入其他的对象,其中property中是引入的对象的名称,就是在类中定义的对象。 resultMap里边放的是要引入的对象的resultMap:引入的类的路径+引入类的resultMap路径。


    

        
        
        
        
        
        

        

举个实例,直接引入一个对象:

类:

import lombok.Data;

import java.util.Date;

@Data
public class Article {
    private Integer uid;
    private String title;
    private String content;
    private Date createtime;
    private Date updatetime;
    private Integer rcount;
    private  Integer state;
//    一般不会这样用,耦合度太高了
// 作者类相关信息
    private User2 user2;
}

mapper 接口:


import com.example.springmybatisdemo.model.Article;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface ArticleMapper {
    List
showAll(); }

测试类代码:

import com.example.springmybatisdemo.model.Article;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
@Slf4j
@SpringBootTest
class ArticleMapperTest {
   //依赖注入
    @Autowired
    private ArticleMapper articleMapper;
    @Test
    void showAll() {
        List
all=articleMapper.showAll(); log.info(all.toString()); } }

此时,我们要进行articleinfo表和userinfo表的联合查询,我们查询当userinfo中的id和articleinfo表中的uid相等的时候 的结果。

此时的xml文件,就涉及了另一个表,那么我们要把这个表引入,就要用到了resultMap,在resultMap中引入要联合查询的表,然后进行查询。

整个xml文件如下:



    

        
        
        
        
        
        

        



    
    

引入的是另一个对象的属性

上边直接引入整个对象,耦合度太高了,一般不建议使用,因此一般使用方法为,引入另一个对象的属性,什么属性呢?自然是多表查询时相关的属性了,当然想知道别的,也可以引入其他属性。

此时代码:

类:

import lombok.Data;

import java.util.Date;

@Data
public class Article {
    private Integer uid;
    private String title;
    private String content;
    private Date createtime;
    private Date updatetime;
    private Integer rcount;
    private  Integer state;


    private Integer userId11;
    private String username;
}

mapper接口:

@Mapper
public interface ArticleMapper {
  
    List
showAll2(); }

测试类:

import com.example.springmybatisdemo.model.Article;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Arrays;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;
@Slf4j
@SpringBootTest
class ArticleMapperTest {
    //注入接口中要测试的方法的实现类对象  接口对象指向他的实现类对象
    @Autowired
    private ArticleMapper articleMapper;

    @Test
    void showAll2() {
        List
all=articleMapper.showAll2(); log.info(all.toString()); } }

xml文件:(注意这里的resultMap)


        
        
        
        
        
        
        
        
    
    

多表查询内容结束,下次再见!

你可能感兴趣的:(Mybatis,javaEE,数据库,mybatis,java,sql,spring,开发语言)