Mybatis3系列课程-ResultMap

简介

MyBatis3 的 resultMap 是一个配置元素(configuration element),用来声明一个自定义查询结果映射。在 MyBatis3 中,有三种类型的 resultMap:resultMap、association 和 collection。每个 resultMap 有一个唯一的标识 ID,通过 SQL Mapper 中的 select 映射元素(select element)引用它。

resultMap 的定义包含以下元素:

  • id:用于唯一标识该 resultMap。
  • type:结果集所映射成的 Java 对象类型。
  • extends:可以引用另外一个 resultMap,继承其属性,以避免代码冗余。
  • discriminator:可以根据查询结果返回不同的结果类型,类似于 Java 中的 switch 语句。
  • constructor:定义构造函数,用于生成映射类的实例。
  • id、result、association、collection:用来声明 resultMap 中的映射关系。

总的来说,resultMap 是 MyBatis3 中一个非常重要的配置元素,它可以帮助开发者完成更灵活、更复杂的数据映射任务。

学习目标 

1. 区分 ResultType 与ResultMap

2. 会使用ResultMap 做数据映射 , 主要体现在 一对一,一对多方面

本次内容, 我们来操作 grade 表, 

Mybatis3系列课程-ResultMap_第1张图片

目前该表中 有2 列 分别为 gid 与gname

如果 我们设计的Grade.java 中的 属性 为 gid , gname 肯定数据会自动映射

但 如果 属性为 id 和name  怎么办?

当 属性与数据库的列名 不一致 如何处理?  可以配置resultMap

 当使用resultType做SQL语句返回结果类型处理时,对于SQL语句查询出的字段在相应的pojo中必须有和它相同的字段对应,

操作步骤 

1. 编写Grade.java

package entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data     // 为属性生成get/set 方法
@AllArgsConstructor  // 全参构造器
@NoArgsConstructor   // 无参构造器
@ToString            // 生成toString()
public class Grade {

    private Integer id;
    private String name;

}

2. 编写 GradeMapper.java ,增加 查询全部年级信息的方法

package mapper;

import entity.Grade;

import java.util.List;

public interface GradeMapper {

    /**
     * 查询全部年级信息
     * @return
     */
    List findAll();
}

3.编写GradeMapper.xml 增加 select 标签





    
    
    

4. 编写测试类

import entity.Grade;
import mapper.GradeMapper;
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 org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestGrade {
    private SqlSessionFactory sqlSessionFactory;
    @Before
    public void init() throws IOException {
        // mybatis 配置文件的文件名
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testFindAll() throws IOException {
        //获得SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        GradeMapper mapper = session.getMapper(GradeMapper.class);
        List list = mapper.findAll();
        list.forEach((e)->System.out.println(e));
    }
}

Mybatis3系列课程-ResultMap_第2张图片

说明:

     grade表 有 gid,gname两列

     Grade.java 有 id 和name 两个属性

   目前表与实体类 的属性对应不上,

  在 GradeMapper.xml 中查询时 ,先采用resultType 来 看下结果,发现 null.

 

配置ResultMap做映射 

resultMap 的配置 , 只需要修改 xxxMapper.xml 即可

打开 GradeMapper.xml 增加 resultMap





    
        
        
    
    
    

运行测试类

Mybatis3系列课程-ResultMap_第3张图片

总结 

Mybatis3系列课程-ResultMap_第4张图片

你可能感兴趣的:(mybatis,数据库,java,mybatis)