MyBatis Mapper.xml核心属性详解

在 MyBatis 的 Mapper.xml 文件中,statement 标签(如 <select><insert> 等)包含多个关键属性,用于定义 SQL 语句的行为和映射规则。以下是核心属性及其含义:


🔍 一、基础属性

  1. id

    • 作用:当前命名空间下 SQL 语句的唯一标识,必须与对应 Mapper 接口的方法名一致。
    • 示例<select id="getUserById" ...> 对应接口方法 User getUserById(int id)
  2. parameterType

    • 作用:指定输入参数的类型(如 java.lang.Integer 或 POJO 全限定名),可省略(MyBatis 会自动推断)。
    • 注意:旧版本支持 parameterMap,但已不推荐使用。
  3. resultType

    • 作用:将查询结果映射为 Java 对象类型(需列名与属性名一致)。
    • 示例resultType="com.example.User" 表示结果映射为 User 对象。
  4. resultMap

    • 作用:通过自定义映射规则处理复杂结果集(如字段名与属性名不一致或嵌套对象)。
    • resultType 二选一,优先使用 resultMap 应对复杂场景。

⚙️ 二、高级控制属性

  1. statementType

    • 取值
      • STATEMENT:直接执行 SQL,无预编译(易受 SQL 注入风险)。
      • PREPARED(默认):预编译 SQL,参数占位符为 #{}
      • CALLABLE:调用存储过程。
    • 示例<select statementType="CALLABLE"> 用于执行存储过程。
  2. useGeneratedKeys

    • 作用:启用 JDBC 主键回写(如 MySQL 自增 ID),需配合 keyProperty 指定接收属性。
    • 示例<insert useGeneratedKeys="true" keyProperty="id">
  3. timeout

    • 作用:设置 SQL 执行超时时间(单位:秒),超时抛出异常。
  4. fetchSize

    • 作用:控制数据库每次返回的最大记录数(优化大数据量查询性能)。

🔄 三、缓存与结果集控制

  1. flushCache

    • 作用:执行后是否清空一级/二级缓存(默认 false,查询不刷新)。
  2. resultSetType

    • 取值
      • FORWARD_ONLY(默认):单向遍历结果集。
      • SCROLL_SENSITIVE:可滚动且敏感(实时反映数据库变化)。
      • SCROLL_INSENSITIVE:可滚动但不敏感(快照模式)。
  3. useCache

    • 作用:是否将结果存入二级缓存(默认 true)。

📌 四、动态 SQL 相关属性

  1. databaseId

    • 作用:指定数据库厂商(如 mysqloracle),用于多数据库适配。
  2. lang

    • 作用:指定动态 SQL 语言驱动(如自定义脚本语言)。

总结

MyBatis 的 statement 属性通过灵活配置平衡了 SQL 控制力与开发效率,核心在于:

  • 基础映射idresultType/resultMap 实现对象关系映射。
  • 性能优化timeoutfetchSize 等提升执行效率。
  • 安全与扩展statementType 和动态 SQL 支持复杂场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码的余温

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值