深入浅出MyBatis:Mapper接口的工作原理与使用流程

该文章已生成可运行项目,

目录

前言

一、Mapper接口的本质

二、核心工作原理:动态代理

1.代理对象生成流程

2. 核心组件协作

三、完整使用流程

1.创建数据库

2.创建一个Maven项目

3.依赖导入

4.创建MyBatis核心配置文件

5.创建Student实体类

6.编写Mapper映射文件

7.编写测试类

总结


前言

        MyBatis作为Java生态中广泛使用的持久层框架,主要用途是代替JDBC来操作数据库,其核心设计思想是将SQL与Java代码解耦。而Mapper接口正是实现这一理念的关键桥梁——它让我们仅需定义Java接口,即可优雅地操作数据库,彻底告别传统JDBC的模板式代码


一、Mapper接口的本质

        Mapper接口是一个普通的Java接口,其中声明了数据库操作方法:

package com.module.mapper;

import com.module.pojo.Student;

import java.util.List;

public interface StudentMapper {
    //定义抽象方法
    public List<Student> selectStudent();
}

        关键点:接口本身没有实现类!MyBatis通过动态代理在运行时生成实现对象

二、核心工作原理:动态代理

1.代理对象生成流程

        当我们调用 Mapper 接口中的方法时,MyBatis 并不会直接让我们去实现这个接口,而是通过动态代理的方式为其生成一个代理对象。这个代理对象会拦截所有对 Mapper 接口方法的调用,从而完成后续的数据库操作。

2. 核心组件协作

  • MapperProxy:这是 MyBatis 框架中实现了 JDK 动态代理InvocationHandler接口的类。当通过session.getMapper(StudentMapper.class)获取代理对象时,MyBatis 会创建MapperProxy实例作为调用处理器,它会拦截 Mapper 接口方法的调用,进而协调后续的 SQL 执行流程。

  • MapperMethod:同样是 MyBatis 自定义的 Java 类,用于封装 Mapper 接口方法对应的 SQL 操作信息,包括 SQL 类型(SELECT/INSERT 等)、参数处理规则、结果转换逻辑等,是连接接口方法与底层 SQL 执行的关键桥梁。

  • MappedStatement:存储XML/注解中的SQL元数据。映射文件中定义了与数据库操作相关的 SQL 语句、参数映射、结果集映射等信息。MyBatis 会根据 Mapper 接口的全限定名去寻找对应的映射文件,或者通过注解的方式在接口方法上直接定义 SQL 语句,实现接口方法与 SQL 操作的绑定。

      当代理对象拦截到方法调用后,会根据方法名、参数等信息,从映射文件或注解中找到对应的 SQL 语句。然后,MyBatis 会处理参数,将其正确地传递到 SQL 语句中,执行 SQL 操作,并对返回的结果集进行处理,按照映射规则转换为对应的 Java 对象返回给调用者。

         这三个组件形成了MyBatis的执行链骨架。MapperProxy是入口,MapperMethod是转换引擎,MappedStatement是操作蓝图。它们这均属于 MyBatis 框架的源码实现,大家如果感兴趣可以等我后面出一篇

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值