MyBatis 进阶-ResultMap

ResultMap

  • 是 MyBatis 中最重要最强大的元素

  • 可以实现复杂查询结果到复杂对象关联的关系转化

    复杂 Java 对象到多张复杂数据表之间关联的转化

使用 ResultMap

复杂对象关系:对象声明中的逻辑关系;主要包含三种:

  • 关联
  • 容器
  • 嵌套

使用方式一,构造函数时传入(Constructor )

类实例化时,将数据库检索结果用注入的方式在类实例化时通过类对象的构造函数注入到对象中。

  • idArg : ID 参数,标记结果作为 ID 可以帮助提高整体效能(自增Id)
  • arg : 注入到构造方法的一个普通结果

一般在建立对象中有数据表关联的时候使用

实例

数据库结构:
MyBatis 进阶-ResultMap_第1张图片
image.png
1.创建 Bean student 类
public class Student {
    private int id;
    private String userName;
    private String corp;
    private List courses;

    public Student(Integer id, String userName, String corp) {
        this.id = id;
        this.userName = userName;
        this.corp = corp;
    }

    public int getId() {
        return id;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }
    ...

注意:要写构造函数

2. 添加接口函数
package com.company;

public interface studentOp {
    public Student getStudent(int id);
}
3.在 mapper 中构建 ResultMap 映射方法
 


    

    
        
            
            
            
        
    

4. 在测试类中调用
public class MoreMybatis {

    public static void main(String[] args) {
        // 1. 声明配置⽂文件的⺫⽬目录渎职
        String resource = "conf.xml";
        // 2. 加载应⽤用配置⽂文件
        InputStream is = MoreMybatis.class.getClassLoader().getResourceAsStream(resource);
        // 3. 创建SqlSessonFactory
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);

        // 4. 获取Session
        SqlSession session = sessionFactory.openSession();
        try{
            // 5. 获取操作类
            StudentOp studentOp = session.getMapper(StudentOp.class);

            // 6. 完成查询操作
            Student student = studentOp.getStudent(25);
            System.out.println(student.getId() + " " + student.getUserName()+ " ");
            System.out.println(student.getCourses().get(0).getCourseName() + " ");
        }finally {
            session.close();
        }

    }
}

使用方式二,Collection 标签传入

实现一对多的关联

  • id 一个id结果;标记结果作为ID 可以帮助提高整体效能
  • result 注入到字段或 JavaBean 属性的普通结果

当类对象中含有自定义的容器列表时。在 类 mapper 文件中使用 collection 标签注入。

在原 mapper 文件的基础上添加 collection 标签
 


    

    
        
            
            
            
        
        
            
            
        
    

使用方式三,Association 标签传入

实现对象与对象之间的关联。

  • id 一个id 结果;标记结果作为 ID 可以帮助提高整体效能
  • result 注入到字段或JavaBean 属性的普通结果

当一个类对象中包含另一个类对象时使用

在 collection 标签下添加 association 标签

所添加的对象需要在 collection 标签所引进的对象内有引用。



    

    
        
            
            
            
        
        
            
            
            
                
                
            
        
    

DataSource

数据库连接池

在 MyBatis 3.0 中内置了连接池;只需在 conf.xml 文件中配置数据库连接中dataSource设为 POOLED 就能启用连接池



    
        
            
            
            
                
                
                
                
            
        

    
    

        
    

『项目地址』:https://github.com/wengfe/JAVA/tree/master/MoreMybatis/src

你可能感兴趣的:(MyBatis 进阶-ResultMap)