MVN--03

一、MyBatis 原生方式:查询 user 表全量数据

核心步骤(对应第一张图)

  1. 数据库准备 :创建tb_user表并插入测试数据

  2. 工程搭建:创建 Maven 模块,导入 MyBatis、MySQL 驱动等依赖坐标

  3. 核心配置文件 :编写mybatis-config.xml,配置数据源(解决 JDBC 硬编码)

    xml

    复制代码
    <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///db1?useSSL=false"/>
        <property name="username" value="root"/>
        <property name="password" value="1234"/>
    </dataSource>
  4. SQL 映射文件 :编写UserMapper.xml,统一管理 SQL 语句(解决代码硬编码)

    xml

    复制代码
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>
  5. 编码执行

    • 定义与表结构对应的 POJO 类User
    • 加载核心配置文件,构建SqlSessionFactory
    • 获取SqlSession,执行selectList("test.selectAll")
    • 释放资源

原生方式的痛点

  • 执行 SQL 时需要硬编码statement id(如"test.selectAll"),一旦 XML 中 id 修改,代码会报错
  • 代码冗余,维护成本高,不符合面向对象开发思想

二、Mapper 代理开发:解决原生方式的硬编码问题

核心目的(对应第二张图)

  • ✅ 彻底解决原生方式中statement id的硬编码问题
  • ✅ 简化 SQL 执行流程,完全面向接口编程
  • ✅ 提升代码可维护性,符合 Spring 生态的开发规范

两种方式的核心对比

表格

对比项 原生方式 Mapper 代理方式
SQL 调用 sqlSession.selectList("test.selectAll")(硬编码 id) userMapper.selectAll()(接口方法调用)
代码风格 面向过程 面向接口
维护性 差(id 修改需同步修改所有调用处) 高(接口与 XML 自动绑定)
开发效率

三、Mapper 代理开发的完整步骤(对应第三张图)

核心绑定规则(必须严格遵守)

  1. 命名与路径一致 :Mapper 接口名与 SQL 映射文件名完全相同,且放在同一目录

    • 接口:com.itheima.mapper.UserMapper.java
    • XML:com.itheima.mapper.UserMapper.xml
  2. namespace 绑定 :XML 的namespace必须等于 Mapper 接口的全限定名

    xml

    复制代码
    <mapper namespace="com.itheima.mapper.UserMapper">
  3. 方法与 SQL 一一对应 :接口方法名 = XML 中 SQL 的id,参数类型、返回值类型完全一致

    java

    运行

    复制代码
    // 接口方法
    List<User> selectAll();

    xml

    复制代码
    <!-- 对应SQL -->
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>

简化配置:包扫描加载映射文件

当接口与 XML 同目录、同名时,可在核心配置中使用包扫描,无需逐个加载 XML:

xml

复制代码
<mappers>
    <!-- 原方式:逐个加载,繁琐 -->
    <!-- <mapper resource="com/itheima/mapper/UserMapper.xml"/> -->
    <!-- 简化方式:包扫描,自动加载该包下所有XML -->
    <package name="com.itheima.mapper"/>
</mappers>

完整可落地代码示例

1. Mapper 接口定义

java

运行

复制代码
package com.itheima.mapper;

import com.itheima.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

// @Mapper 注解用于SpringBoot整合时自动扫描,纯MyBatis可省略
public interface UserMapper {
    // 查询所有用户
    List<User> selectAll();
}
2. SQL 映射文件(UserMapper.xml)

xml

复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.itheima.mapper.UserMapper">
    <select id="selectAll" resultType="com.itheima.pojo.User">
        select * from tb_user;
    </select>
</mapper>
3. 测试代码

java

运行

复制代码
public class MyBatisTest {
    public static void main(String[] args) throws IOException {
        // 1. 加载核心配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 2. 获取SqlSession
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            // 3. 获取Mapper代理对象(核心!MyBatis自动生成代理实现类)
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            
            // 4. 调用方法执行SQL(无硬编码!)
            List<User> users = userMapper.selectAll();
            users.forEach(System.out::println);
        }
    }
}

四、核心优势总结

表格

优势 说明
消除硬编码 彻底告别statement id硬编码,避免修改 XML 导致的代码报错
面向接口编程 符合 Java 开发规范,代码更优雅,便于单元测试
简化配置 包扫描自动加载 XML,无需手动维护映射文件路径
无缝整合 Spring 完美适配 Spring/SpringBoot 的依赖注入,是企业级开发的标准方案
类型安全 编译期即可检查方法参数、返回值是否匹配,避免运行时错误
相关推荐
cheoyeon11 小时前
ruoyi-cloud项目开发
spring·spring cloud·maven
crack_comet2 天前
Spring Boot 3.5.11 分离打包(无参数启动+Jar瘦身)完整配置文档
java·spring boot·后端·maven·intellij-idea·jar
2401_895521342 天前
SpringBoot Maven快速上手
spring boot·后端·maven
KoiHeng3 天前
初识Maven
java·maven
splage3 天前
maven导入spring框架
数据库·spring·maven
请为小H留灯3 天前
一键解决 IDEA 中 Java 项目变橙色的问题!!!
java·ide·maven·intellij-idea·java项目
看见代码就想敲4 天前
java学习之(Maven pom.xml 详细讲解)
java·学习·maven
huohuopro4 天前
Maven进阶
python·pycharm·maven
TlYf NTLE4 天前
Spring Boot spring-boot-maven-plugin 参数配置详解
spring boot·后端·maven