当前位置: 首页 > news >正文

mapper.xml中的<include>是什么

目录

基本用法

核心优势

注意事项

典型场景


在 MyBatis 的 mapper.xml 文件中,<include> 标签用于引用可复用的 SQL 代码片段,通常与 <sql> 标签配合使用。它的核心作用是减少重复代码,提高 SQL 的可维护性。


基本用法

  1. 定义 SQL 片段
    使用 <sql> 标签定义一个可复用的 SQL 片段,并为其指定唯一 id

     

    xml

    <sql id="userColumns">
    id, username, email, create_time
    </sql>
  2. 通过 <include> 引用片段
    在需要的地方通过 <include> 标签引用该片段:

     

    xml

    <select id="selectUsers" resultType="User">
    SELECT
    <include refid="userColumns"/>
    FROM users
    WHERE status = 1
    </select>

核心优势

  1. 代码复用
    避免在多个 SQL 语句中重复编写相同的列名、条件或复杂逻辑。

  2. 统一维护
    修改 <sql> 片段后,所有引用该片段的 SQL 会自动生效,无需逐个修改。

  3. 动态参数支持
    可以结合 <property> 标签传递参数,实现动态 SQL 片段:

     

    xml

    <sql id="dynamicWhere">
    WHERE status = #{status}
    <if test="name != null">
    AND name LIKE #{name}
    </if>
    </sql>
    <select id="selectByCondition" resultType="User">
    SELECT * FROM users
    <include refid="dynamicWhere">
    <property name="status" value="1"/>
    <property name="name" value="John"/>
    </include>
    </select>

注意事项

  1. 作用域限制
    默认只能引用同一文件中定义的 <sql> 片段。若需跨文件引用,需通过命名空间(namespace)指定:

    xml

    <include refid="com.example.mapper.UserMapper.userColumns"/>
  2. 避免循环引用
    确保 <sql> 片段之间没有相互引用,否则会导致解析错误。

  3. 优先级规则
    如果 <include> 中定义了 <property>,会覆盖外部传入的同名参数。


典型场景

  • 复用列名
    多个查询需要返回相同字段时,定义列名片段。
  • 统一条件逻辑
    如分页参数、软删除条件(status=1)等。
  • 动态拼接 SQL
    结合 <if><foreach> 等标签实现条件分支。

通过合理使用 <include>,可以显著提升 MyBatis 映射文件的简洁性和可维护性。

http://www.dtcms.com/a/308848.html

相关文章:

  • 【React】状态管理
  • Spring 面试点(八股)
  • review| advance
  • wxPython 实践(五)高级控件
  • 企业对于DDOS攻击有哪几种安全防护对策?
  • 选择跨网文件交换系统的核心因素有哪些?
  • Kafka Streams性能优化实践指南:实时流处理与状态管理
  • 脚手架搭建React项目
  • LCGL基本使用
  • 智慧园区通行效率↑68%!陌讯多模态融合算法的实战解析
  • 【C++】1·入门基础
  • C语言基础第18天:动态内存分配
  • 什么是 MySQL 的索引?常见的索引类型有哪些?
  • 【动态规划】数位dp
  • 【AD】域管理员登录错误
  • Google政策大更新:影响金融,Ai应用,社交,新闻等所有类别App
  • 王道考研-数据结构-01
  • Qt_Gif_Creator 基于Qt的屏幕gif录制工具
  • 汽车线束行业AI智能化MES解决方案:推动智能制造与质量升级
  • cpu运行 kokoro tts 服务器语音转化首选
  • 为什么 Batch Normalization 放在全连接/卷积层的输出之后?
  • linux如何将两份hdmi edid合并
  • 硬件电路基础学习
  • Cesium 快速入门(五)坐标系
  • LangGraph底层原理与基础应用入门
  • vue3可编辑表格
  • linux自动构建工具make/makefile
  • 【计算机网络】5传输层
  • MySQL 中的 JOIN 操作有哪些类型?它们之间有什么区别?
  • 国标gb28181 SIP协商详细分析