0%

MyBatis 映射文件深度解析:从基础 CRUD 到复杂关联与动态 SQL

MyBatis 映射文件(通常命名为 XxxMapper.xml)是 SQL 语句与 Java 接口的 “桥梁”,承担着SQL 定义、参数映射、结果转换、缓存配置四大核心职责。相较于全局配置文件,映射文件更贴近业务逻辑,是 MyBatis 灵活可控的关键。本文在基础 CRUD 之上,补充动态 SQL、批量操作、复杂关联映射、缓存优化工程最佳实践,覆盖 90% 以上的开发场景。

核心 CRUD 操作:细节与扩展

MyBatis 通过 <select><insert><update><delete> 标签实现 CRUD,每个标签都有丰富的属性控制 SQL 执行逻辑,需重点关注事务提交、主键生成、批量操作三大核心场景。

基础 CRUD 与事务提交

MyBatis 的 SqlSession 默认不自动提交事务,需手动调用 commit() 或开启自动提交。

(1)基础示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!-- 1. 查询:根据 ID 获取用户 -->
<select id="getUserById" parameterType="Long" resultType="com.example.pojo.User">
SELECT id, user_name AS userName, age FROM t_user WHERE id = #{id}
</select>

<!-- 2. 插入:新增用户 -->
<insert id="insertUser" parameterType="com.example.pojo.User">
INSERT INTO t_user (user_name, age) VALUES (#{userName}, #{age})
</insert>

<!-- 3. 更新:修改用户信息 -->
<update id="updateUser" parameterType="com.example.pojo.User">
UPDATE t_user SET user_name = #{userName}, age = #{age} WHERE id = #{id}
</update>

<!-- 4. 删除:根据 ID 删除用户 -->
<delete id="deleteUser" parameterType="Long">
DELETE FROM t_user WHERE id = #{id}
</delete>
(2)事务提交方式
阅读全文 »

MyBatis 全局配置文件深度解析:从核心节点到工程实践

MyBatis 全局配置文件(默认命名为 mybatis-config.xml)是 MyBatis 框架的 “总开关”,用于配置数据库连接、映射规则、缓存策略、插件等核心参数。其配置节点有严格的顺序要求(必须按 properties→settings→typeAliases→typeHandlers→objectFactory→plugins→environments→databaseIdProvider→mappers 排列,乱序会导致解析报错),每个节点都承担特定职责。本文将逐一拆解每个节点的核心作用、配置方式、实际应用场景及工程最佳实践,帮助开发者掌握 MyBatis 配置的精髓。

根节点 <configuration>:配置入口

  • 核心作用:作为所有配置节点的父容器,定义 MyBatis 的全局配置上下文。

  • 关键规则:子节点必须按固定顺序排列(MyBatis 解析时会严格校验顺序,顺序错误会抛出 ConfigurationException)。

  • 示例结构:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    <!-- 子节点按固定顺序排列 -->
    <properties/>
    <settings/>
    <typeAliases/>
    <typeHandlers/>
    <objectFactory/>
    <plugins/>
    <environments/>
    <databaseIdProvider/>
    <mappers/>
    </configuration>

<properties>:属性配置(外部化配置)

核心作用

将数据库连接信息(如 URL、用户名、密码)、环境变量等外部化,避免硬编码在配置文件中,支持动态替换(如开发 / 测试 / 生产环境切换)。

三种配置方式与优先级

MyBatis 加载属性的优先级从低到高如下(高优先级覆盖低优先级):

阅读全文 »

MyBatis 深度解析:从核心特性到与 JDBC、Hibernate 的全方位对比

MyBatis 作为 Java 生态中半自动化持久层框架的代表,以 “SQL 与代码分离、灵活可控、轻量高效” 的特性,成为互联网项目(尤其是对 SQL 优化有强需求的场景)的首选。本文将从 MyBatis 的核心定义出发,深入剖析其对 JDBC 的封装优化、与 Hibernate 的本质差异,并补充工程实践中的关键配置与最佳实践,帮助开发者全面理解 MyBatis 的设计理念与适用场景。

MyBatis 核心概念与设计理念

什么是 MyBatis?

MyBatis 最初是 Apache 的开源项目 iBatis,2010 年更名为 MyBatis。它是一款半自动化持久层框架,核心是 “将 SQL 编写与 Java 业务代码分离”,同时封装 JDBC 的冗余操作(如连接管理、参数设置、结果映射),让开发者专注于 SQL 逻辑本身。

核心特性
  • 半自动化:区别于 Hibernate 的 “全自动 ORM”,MyBatis 仅自动完成 “参数映射→SQL 执行→结果映射”,SQL 需开发者手动编写(或通过注解配置),兼顾灵活性与效率;
  • SQL 与代码分离:SQL 集中配置在 XML 文件或通过注解定义,修改 SQL 无需改动 Java 代码,降低维护成本;
  • 强大的映射能力:支持复杂结果映射(如一对一、一对多关联)、自定义类型转换器,适配各种数据库表结构与 Java 对象的映射场景;
  • 轻量级:无复杂依赖,学习成本低,配置简单,可快速集成到 Spring、Spring Boot 等主流框架;
  • 支持动态 SQL:通过 <if><choose><foreach> 等标签编写动态 SQL,适配多条件查询、批量操作等场景。

设计理念:“专注 SQL,简化封装”

MyBatis 的设计围绕 “开发者对 SQL 拥有绝对控制权” 展开:

阅读全文 »

Java 语言简介:跨平台特性与核心原理

Java 是由 Sun Microsystems(后被 Oracle 收购)于 1995 年推出的面向对象编程语言,以跨平台性安全性可扩展性著称,广泛应用于企业级开发、移动应用(Android)、大数据处理等领域。

Java 的核心特性

  1. 跨平台性(Write Once, Run Anywhere)
    这是 Java 最显著的优势。Java 程序经编译后生成字节码(.class 文件),而非直接生成机器码。字节码可在安装了 Java 虚拟机(JVM) 的任何平台(Windows、Linux、macOS 等)上运行,无需重新编译。
    • 实现原理:不同平台安装对应版本的 JVM,由 JVM 负责将字节码解释或编译为本地机器码。
    • 对比其他语言:C/C++ 需为不同平台编译不同的机器码,而 Java 只需一次编译,多平台运行。
  2. 面向对象(OOP)
    Java 完全支持面向对象编程的三大特性:
    • 封装:通过类和对象封装数据与行为,隐藏实现细节。
    • 继承:允许类继承父类的属性和方法,实现代码复用。
    • 多态:同一方法在不同对象上有不同实现(如重写、接口)。
  3. 安全性与健壮性
    • 内存管理:通过垃圾回收机制(Garbage Collection)自动释放无用对象,减少内存泄漏。
    • 强类型检查:编译期严格检查数据类型,避免类型错误。
    • 异常处理:强制处理可能的异常,增强程序容错能力。
    • 沙箱机制:限制程序对系统资源的访问(如 Applet 程序),保障安全性。
  4. 多线程支持
    Java 内置多线程库(java.lang.Thread),简化并发编程,适合开发高性能、响应迅速的应用(如服务器程序)。
  5. 丰富的类库与生态
    • 标准库(JDK)提供大量现成工具类(如集合框架、IO 操作、网络编程)。
    • 第三方框架(Spring、MyBatis、Hadoop 等)覆盖企业开发各领域,大幅提升开发效率。

Java 程序的运行流程

Java 程序从编写到运行需经历编译运行两个阶段,核心依赖 JDK(Java 开发工具包)和 JVM:

阅读全文 »

Spring MVC 核心注解全解析:从基础到实战

Spring MVC 提供了丰富的注解体系,简化了请求映射、参数绑定、数据共享等核心功能的开发。从 “注解作用→核心属性→实战示例→注意事项” 四个维度,详细解析 @RequestMapping@PathVariable@RequestParam 等常用注解的使用方法与设计思想。

@RequestMapping:请求路径映射的核心注解

@RequestMapping 是 Spring MVC 中最基础的注解,用于将 HTTP 请求映射到 Controller 方法,可标注在类或方法上,实现细粒度的路径控制。

1. 核心作用

  • 类级别:定义当前 Controller 的基础路径(所有方法路径的前缀);
  • 方法级别:定义具体方法的映射路径(与类级别路径组合为完整路径)。

2. 核心属性

属性名 类型 作用描述 示例
value/path String[] 映射的 URL 路径(支持 Ant 表达式) @RequestMapping(path = "/user/list")
method RequestMethod[] 指定允许的 HTTP 请求方法(如 GET、POST) method = {RequestMethod.GET, RequestMethod.POST}
params String[] 限制请求必须包含指定参数(支持表达式) params = {"id", "name!=admin"}(必须有 id 参数,name 不能为 admin)
headers String[] 限制请求必须包含指定请求头 headers = "Content-Type=application/json"
consumes String[] 限制请求的 Content-Type 类型 consumes = "application/json"
produces String[] 限制响应的 Content-Type 类型 produces = "application/json;charset=UTF-8"

3. Ant 路径匹配规则

@RequestMappingpath 属性支持 Ant 风格的路径表达式,灵活匹配 URL:

阅读全文 »