MVN--03

张开发
2026/4/12 21:31:22 15 分钟阅读

分享文章

MVN--03
一、MyBatis 原生方式查询 user 表全量数据核心步骤对应第一张图数据库准备创建tb_user表并插入测试数据工程搭建创建 Maven 模块导入 MyBatis、MySQL 驱动等依赖坐标核心配置文件编写mybatis-config.xml配置数据源解决 JDBC 硬编码xmldataSource typePOOLED property namedriver valuecom.mysql.jdbc.Driver/ property nameurl valuejdbc:mysql:///db1?useSSLfalse/ property nameusername valueroot/ property namepassword value1234/ /dataSourceSQL 映射文件编写UserMapper.xml统一管理 SQL 语句解决代码硬编码xmlselect idselectAll resultTypecom.itheima.pojo.User select * from tb_user; /select编码执行定义与表结构对应的 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)硬编码 iduserMapper.selectAll()接口方法调用代码风格面向过程面向接口维护性差id 修改需同步修改所有调用处高接口与 XML 自动绑定开发效率低高三、Mapper 代理开发的完整步骤对应第三张图核心绑定规则必须严格遵守命名与路径一致Mapper 接口名与 SQL 映射文件名完全相同且放在同一目录下接口com.itheima.mapper.UserMapper.javaXMLcom.itheima.mapper.UserMapper.xmlnamespace 绑定XML 的namespace必须等于 Mapper 接口的全限定名xmlmapper namespacecom.itheima.mapper.UserMapper方法与 SQL 一一对应接口方法名 XML 中 SQL 的id参数类型、返回值类型完全一致java运行// 接口方法 ListUser selectAll();xml!-- 对应SQL -- select idselectAll resultTypecom.itheima.pojo.User select * from tb_user; /select简化配置包扫描加载映射文件当接口与 XML 同目录、同名时可在核心配置中使用包扫描无需逐个加载 XMLxmlmappers !-- 原方式逐个加载繁琐 -- !-- mapper resourcecom/itheima/mapper/UserMapper.xml/ -- !-- 简化方式包扫描自动加载该包下所有XML -- package namecom.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 { // 查询所有用户 ListUser selectAll(); }2. SQL 映射文件UserMapper.xmlxml?xml version1.0 encodingUTF-8 ? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN https://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.itheima.mapper.UserMapper select idselectAll resultTypecom.itheima.pojo.User select * from tb_user; /select /mapper3. 测试代码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无硬编码 ListUser users userMapper.selectAll(); users.forEach(System.out::println); } } }四、核心优势总结表格优势说明消除硬编码彻底告别statement id硬编码避免修改 XML 导致的代码报错面向接口编程符合 Java 开发规范代码更优雅便于单元测试简化配置包扫描自动加载 XML无需手动维护映射文件路径无缝整合 Spring完美适配 Spring/SpringBoot 的依赖注入是企业级开发的标准方案类型安全编译期即可检查方法参数、返回值是否匹配避免运行时错误

更多文章