Mapper 怎么能找到实体和数据库

一、一句话先给结论(先有整体感)

Mapper 能找到实体和数据库,靠的是这 4 件事:

  1. Mapper 接口被 Spring 扫描成 Bean

  2. Mapper 接口 ↔ XML 的 namespace / 方法名 对应

  3. SQL 执行结果 ↔ 实体字段 映射

  4. DataSource + SqlSessionFactory 决定"连哪个数据库"

二、Mapper 是怎么"被 Spring 发现"的?

1️⃣ Mapper 本质是什么?

复制代码
public interface UserInfoMapper {
    String querySystemUser();
}

注意一句话:

Mapper 接口没有实现类,但运行时却能调用

为什么?

2️⃣ @MapperScan 做了什么?

在 Spring Boot 启动类里(或配置类):

复制代码
@SpringBootApplication
@MapperScan("。。。。。")
public class Application {
}

它做了三件事:

  1. 扫描包

  2. 发现所有 Mapper 接口

  3. 给每个接口生成一个"动态代理对象"

这个代理对象,才是真正被注入的 Bean。

复制代码
@Autowired
private UserInfoMapper userInfoMapper; // 注入的是代理对象

三、Mapper 是怎么"找到数据库"的?

1️⃣ 数据库连接是谁管的?

不是 Mapper。

是 DataSource。

复制代码
spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/xxx
    username: postgres
    password: ***

Spring Boot 自动帮你创建:

复制代码
DataSource
    ↓
SqlSessionFactory
    ↓
SqlSession

所有 Mapper 都共用这个 SqlSessionFactory

2️⃣ 所以 Mapper 干的事情其实只有一件:

"拿着 SQL → 通过 SqlSession → 用 DataSource 执行"

四、Mapper 方法是怎么找到 XML 里的 SQL 的?

Mapper 接口 XML
全限定名 namespace
方法名 select / update / insert 的 id
相关推荐
一只积极向上的小咸鱼1 小时前
第一性原理思考:从拆解问题到用实验检验答案
数据库
这个DBA有点耶2 小时前
时序数据库InfluxDB高基数问题深度拆解:内存索引膨胀机制与OOM完整链路
数据库·架构·dba
加油yx2 小时前
MySQL数据类型
数据库·mysql
蓝胖的四次元口袋2 小时前
Redis知识梳理(1)
数据库·redis·缓存
夜雪一千2 小时前
MySQL 数据加密实战:从传输、存储到字段级加密,分清场景不踩坑
数据库·mysql
wefg13 小时前
【Redis】C++ 自定义客户端
数据库·redis·缓存
这个DBA有点耶3 小时前
为什么UPDATE比SELECT危险得多?锁范围等于扫描行数
数据库·架构·代码规范
天国梦4 小时前
国密门禁品牌怎么选?2026年最新3个避坑要点
运维·服务器·数据库·python
DB哥讲数据库4 小时前
【达梦数据库安装教程】超详细图文讲解-附达梦安装包
数据库·oracle
Hoxy.R4 小时前
【金仓数据库产品体验官】KingbaseES V9R2C16 坏块检测与修复完整测试流程
数据库