那xml对应的sql语法,列举一下

在 MyBatis 的 XML 映射文件中,SQL 语法主要可以分为三大类:基础 CRUD 操作标签动态 SQL 标签 以及辅助配置标签

结合业界常用的开发规范,我为您系统梳理了这些标签及其对应的 SQL 语法和用法:

一、 基础 CRUD 操作标签

这四个标签对应了数据库中最基本的增删改查操作:

  1. <select> :定义查询语句。通过 id 绑定接口方法,resultTyperesultMap 指定返回类型。

    xml 复制代码
    <select id="getUserById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
  2. <insert> :定义插入语句。常配合 useGeneratedKeys="true"keyProperty="id" 实现自增主键回填。

    xml 复制代码
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO user (name, age) VALUES (#{name}, #{age})
    </insert>
  3. <update> :定义更新语句。

    xml 复制代码
    <update id="updateUser">
        UPDATE user SET name = #{name} WHERE id = #{id}
    </update>
  4. <delete> :定义删除语句。

    xml 复制代码
    <delete id="deleteUser">
        DELETE FROM user WHERE id = #{id}
    </delete>

二、 动态 SQL 标签

这是 MyBatis 最强大的特性,允许根据传入参数的值动态拼接 SQL,避免在 Java 代码中手动拼接字符串:

  1. <if> :条件判断。当 test 属性中的 OGNL 表达式为 true 时,包含该段 SQL。

    xml 复制代码
    <if test="name != null">
        AND name = #{name}
    </if>
  2. <where> :智能处理 WHERE 子句。它会自动添加 WHERE 关键字,并智能去除开头多余的 ANDOR

    xml 复制代码
    <where>
        <if test="name != null">AND name = #{name}</if>
        <if test="age != null">AND age = #{age}</if>
    </where>
  3. <set> :智能处理 UPDATE 语句的 SET 子句。自动添加 SET 关键字,并去除末尾多余的逗号。

    xml 复制代码
    <update id="updateUser">
        UPDATE user
        <set>
            <if test="name != null">name = #{name},</if>
            <if test="age != null">age = #{age},</if>
        </set>
        WHERE id = #{id}
    </update>
  4. <foreach> :循环遍历集合(如 List、Array)。常用于生成 IN (...) 查询或批量插入。

    xml 复制代码
    WHERE id IN
    <foreach collection="ids" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
  5. <choose>, <when>, <otherwise> :多条件分支选择,类似于 Java 中的 switch-case 语句。只会执行第一个满足条件的 <when>,若都不满足则执行 <otherwise>

    xml 复制代码
    <choose>
        <when test="id != null">AND id = #{id}</when>
        <when test="name != null">AND name = #{name}</when>
        <otherwise>AND status = 1</otherwise>
    </choose>
  6. <trim> :自定义字符串修剪。可以灵活地添加或去除 SQL 片段的前后缀(如 prefixOverrides 去除前导的 AND)。

  7. <bind> :创建变量并绑定到上下文。常用于模糊查询中拼接 % 号,例如 <bind name="pattern" value="'%' + keyword + '%'" />

三、 辅助与配置标签

  1. <sql><include> :用于定义和复用 SQL 片段。将公共的查询列或条件提取出来,避免重复编写。

    xml 复制代码
    <sql id="userColumns">id, name, age</sql>
    <select id="getUsers" resultType="User">
        SELECT <include refid="userColumns"/> FROM user
    </select>
  2. <resultMap> :处理复杂的对象映射关系。当数据库字段名与 Java 对象属性名不一致,或涉及一对一、一对多关联查询时使用。

    xml 复制代码
    <resultMap id="UserResultMap" type="User">
        <id property="id" column="user_id"/>
        <result property="name" column="user_name"/>
    </resultMap>

总结:

在实际开发中,最常用的组合是 <select>/<update> + <where> + <if> (用于多条件组合查询和动态更新),以及 <foreach>(用于批量操作和 IN 查询)。掌握这些标签,基本可以覆盖 95% 以上的复杂 SQL 编写需求。


需要我把这些标签按使用场景整理成一份速查表吗?比如什么情况下用哪个标签,配个示例,开发时直接对照就行。

相关推荐
. . . . .2 小时前
乐观锁 vs 悲观锁
数据库·sql
Leo.yuan2 小时前
2026年多数据库实时同步的四种架构方案及工具推荐
数据库·架构
hasty2 小时前
Origin 校验不是身份认证:MySQL MCP Server 漏洞给 AI 平台的警告
数据库·mysql·安全
梦想平凡3 小时前
百游棋牌源代码开发搭建教程(五):房间创建、座位分配与请求幂等实现
前端·javascript·数据库·源代码管理
凤山老林3 小时前
Spring Boot 整合 Flowable 的企业级落地指南
数据库·spring boot·后端·flowable·工作流
企业数字化笔记3 小时前
AI写的系统出现504怎么办?接口超时和数据库慢查询排查
数据库·后端
2601_962218614 小时前
万象生鲜系统订单全生命周期状态同步技术实现业务可视
大数据·数据库·人工智能·python·算法
Wang's Blog4 小时前
Java框架快速入门:Spring Security+OAuth2之用户注册与唯一性校验实现
java·数据库·spring
跨境生态圈5 小时前
2026谷歌SEO快速排名深度解析:合规起量、避坑指南与实战落地策略
数据库·人工智能·爬虫·搜索引擎·chatgpt