首页 > 编程语言 >JAVA开发中 MyBatis XML 映射文件 的作用

JAVA开发中 MyBatis XML 映射文件 的作用

时间:2025-01-04 10:02:13浏览次数:3  
标签:XML JAVA 映射 SQL MyBatis Java id

MyBatis XML 映射文件(通常是以 .xml 结尾的文件,例如 UserMapper.xml)是 MyBatis 框架的重要组成部分,主要用于定义 SQL语句结果映射关系 以及 参数绑定。它的作用是将 Java 方法与 SQL 语句关联起来,实现持久化操作(如查询、插入、更新和删除)。

以下是关于 MyBatis XML 映射文件的详细说明:


1. XML 映射文件的作用

1.1 定义 SQL 语句

  • MyBatis 的核心功能是操作数据库,XML 映射文件提供了对 SQL 的直接控制。
  • 开发者可以在 XML 中定义复杂的 SQL 查询语句,而不是将其硬编码在 Java 方法中。

1.2 参数绑定

  • XML 映射文件可以将 Java 对象的属性(或方法参数)与 SQL 语句中的占位符绑定,从而实现动态参数注入。

1.3 定义结果映射

  • 映射文件可以指定 SQL 查询结果如何映射到 Java 对象。
  • 支持将数据库表的列映射到 Java 对象的属性上,甚至支持嵌套映射。

1.4 动态 SQL

  • XML 文件可以实现动态 SQL,通过 <if><choose><foreach> 等标签动态生成 SQL。

2. XML 映射文件的组成结构

2.1 基本结构

以下是 MyBatis XML 映射文件的基本结构:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
    <!-- 查询语句 -->
    <select id="getUserById" parameterType="int" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <!-- 插入语句 -->
    <insert id="insertUser" parameterType="com.example.entity.User">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>

    <!-- 更新语句 -->
    <update id="updateUser" parameterType="com.example.entity.User">
        UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>

    <!-- 删除语句 -->
    <delete id="deleteUserById" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>
</mapper>

2.2 关键部分说明

  • <mapper>

    • 根标签,表示这是一个 MyBatis 映射文件。
    • namespace:命名空间,用于区分不同的 Mapper 接口。
  • SQL 标签

    • <select>:定义 SELECT 查询语句。
    • <insert>:定义 INSERT 插入语句。
    • <update>:定义 UPDATE 更新语句。
    • <delete>:定义 DELETE 删除语句。
  • 属性

    • id:映射的方法名,与 Java 接口中的方法对应。
    • parameterType:传入参数的 Java 类型。
    • resultType:返回结果的 Java 类型(<select> 中使用)。

3. XML 映射文件的常见功能

3.1 参数绑定

MyBatis 支持通过 #{} 占位符绑定参数。例如:

<select id="getUserById" parameterType="int" resultType="com.example.entity.User">
    SELECT * FROM users WHERE id = #{id}
</select>
  • #{id}:表示将方法传入的 id 参数注入到 SQL 中。

3.2 结果映射

可以将查询结果的字段与 Java 对象的属性映射。例如:

<select id="getUserById" parameterType="int" resultMap="UserResultMap">
    SELECT id, name, email FROM users WHERE id = #{id}
</select>

<resultMap id="UserResultMap" type="com.example.entity.User">
    <id column="id" property="id" />
    <result column="name" property="name" />
    <result column="email" property="email" />
</resultMap>
  • <resultMap>:定义字段与属性的映射关系。
    • column:数据库表的字段名。
    • property:Java 对象的属性名。

3.3 动态 SQL

MyBatis 提供动态 SQL 标签,用于生成灵活的 SQL 查询:

3.3.1 <if> 标签

根据条件动态生成 SQL:

<select id="getUsersByCondition" parameterType="map" resultType="com.example.entity.User">
    SELECT * FROM users WHERE 1=1
    <if test="name != null">
        AND name = #{name}
    </if>
    <if test="email != null">
        AND email = #{email}
    </if>
</select>
  • test:判断条件。
3.3.2 <foreach> 标签

用于处理集合参数(如列表):

<select id="getUsersByIds" parameterType="list" resultType="com.example.entity.User">
    SELECT * FROM users WHERE id IN
    <foreach item="id" index="index" collection="list" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>
  • collection:指定集合参数的名字(如 list)。
  • item:每次循环的当前项。
  • separator:分隔符(如 ,)。
  • openclose:括号或其他包装字符。

3.4 引用公共 SQL 片段

通过 <sql> 定义公共 SQL 片段,并在其他地方引用:

<sql id="BaseColumnList">
    id, name, email
</sql>

<select id="getAllUsers" resultType="com.example.entity.User">
    SELECT <include refid="BaseColumnList" /> FROM users
</select>
  • <include>:用于引用 idBaseColumnList 的 SQL 片段。

4. MyBatis XML 映射文件的优点

  1. SQL 独立性:SQL 语句与 Java 代码分离,便于管理和维护。
  2. 灵活性:支持复杂的动态 SQL 生成。
  3. 可重用性:通过 <sql> 定义公共片段,避免重复代码。
  4. 可扩展性:支持复杂的结果映射和嵌套查询。

5. XML 映射文件和 Mapper 接口的关系

  • XML 映射文件中的 id 属性与 Mapper 接口的方法名一一对应。
  • 在接口中定义方法,例如:
    public interface UserMapper {
        User getUserById(int id);
        void insertUser(User user);
    }
    
  • 配置 Mapper
    • XML 文件与接口的 namespace 和方法名对应。
    • MyBatis 自动将 XML 中的 SQL 映射到接口方法。

总结

MyBatis 的 XML 映射文件在持久化操作中承担了非常重要的角色。它的主要作用是:

  1. 定义 SQL 语句。
  2. 管理参数和结果的映射关系。
  3. 实现动态 SQL 和复杂查询。

通过使用 XML 映射文件,开发者可以灵活地管理 SQL 语句,同时保持代码的清晰和可维护性。

标签:XML,JAVA,映射,SQL,MyBatis,Java,id
From: https://blog.csdn.net/weixin_64401027/article/details/144923711

相关文章

  • JavaScript 中最难理解的三个知识点,面试命中率 99% !
    原型与原型链说到原型,就不得不提一下构造函数,首先我们看下面一个简单的例子:functionDog(name,age){this.name=name;this.age=age;}letdog1=newDog("哈士奇",3);letdog2=newDog("泰迪",2);首先创造空的对象,再让this指向这个对象,通过this.n......
  • Java项目:师生健康信息管理系统(java+SpringBoot+Mybaits+Vue+elementui+mysql)
     源码获取:俺的博客首页"资源"里下载!项目介绍springboot师生健康信息管理系统环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.硬件环境:windows7/8/101G内存以上;或者MacO......
  • Java项目:师生健康信息管理系统(java+SpringBoot+Mybaits+Vue+elementui+mysql)
     源码获取:俺的博客首页"资源"里下载!项目介绍springboot师生健康信息管理系统环境需要1.运行环境:最好是javajdk1.8,我们在这个平台上运行的。其他版本理论上也可以。2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;3.硬件环境:windows7/8/101G内存以上;或者MacO......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘 要本论文主要论述了如何使用SSM框架开发一个网络课程系统,将严格按照软件开发流程进行各个阶段的工作,采用B/S架构Java技术,面向对象编程思想进行项目开发。在引言中,将论述网络课程系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设健康饮食推荐系统。本设计主要实现集人性化、高效率、便捷等优点于一身的健康饮......
  • Easysearch Java SDK 2.0.x 使用指南(三)
    在EasysearchJavaSDK2.0.x使用指南(一)中,我们介绍了EasysearchJavaSDK2.0.2的基本使用和批量操作功能。在EasysearchJavaSDK2.0.x使用指南(二)中,则详细介绍了索引管理相关的功能,包括索引的创建、删除、开关、刷新、滚动等操作,以及新版SDK提供的同步和异步两种调用......
  • 25.Java JUC 引入(进程与线程、线程的状态、并发与并行、管程、用户线程与守护线程)
    一、JUC简介JUC是java.util.concurrent工具包的简称,这是一个处理线程的工具包,从JDK1.5开始出现二、进程与线程1、基本介绍(1)进程进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础在当代面向线程设......
  • java对象与map之间互转操作的八种姿势
    Java将对象转为Map,可以采用的八种操作姿势,按顺序推荐选择,推荐前三势好用又方便。提示:如果Map转换对象失败或为空,取消对象的lombok方式,用set/get方法一势Fastjson操作转换Fastjson阿里巴巴的一个开源JSON库,性能极快,支持JSON与Collection、Map、JavaBean之间的转换,并且......
  • java反射 -2025/1/3
    以下是java.lang.reflect包中的主要类和接口的详细介绍:Class类功能:表示类的对象,提供了获取类信息的方法,如字段、方法、构造函数等。主要方法:getFields():获取所有公共字段。getDeclaredFields():获取所有声明的字段,包括私有字段。getMethods():获取所有公共方法。getDecla......
  • Java 面向对象-封装
    何为封装(Encapsulation)面向对象的开发原则为“高内聚,低耦合”,即类的内部数据操作细节自己完成,不允许外部干涉,仅暴露少量方法给外部调用使用。例如,开车,我们无需懂得油门、离合、变速箱也可以驾驶。封装性本质是解耦(decouple)的表现在JAVA中,实现封装就是控制类或成员的可见范......