MyBatis Mapper.xml核心属性示例详解
作者:代码的余温
文章详解MyBatis Mapper.xml中statement标签的核心属性,涵盖SQL映射、执行控制、缓存管理及动态SQL,强调灵活配置对开发效率和系统性能的重要性,感兴趣的朋友一起看看吧
在 MyBatis 的 Mapper.xml 文件中,statement 标签(如 <select>、<insert> 等)包含多个关键属性,用于定义 SQL 语句的行为和映射规则。以下是核心属性及其含义:
🔍 一、基础属性
id- 作用:当前命名空间下 SQL 语句的唯一标识,必须与对应 Mapper 接口的方法名一致。
- 示例:
<select id="getUserById" ...>对应接口方法User getUserById(int id)。
parameterType- 作用:指定输入参数的类型(如
java.lang.Integer或 POJO 全限定名),可省略(MyBatis 会自动推断)。 - 注意:旧版本支持
parameterMap,但已不推荐使用。
- 作用:指定输入参数的类型(如
resultType- 作用:将查询结果映射为 Java 对象类型(需列名与属性名一致)。
- 示例:
resultType="com.example.User"表示结果映射为User对象。
resultMap- 作用:通过自定义映射规则处理复杂结果集(如字段名与属性名不一致或嵌套对象)。
- 与
resultType二选一,优先使用resultMap应对复杂场景。
⚙️ 二、高级控制属性
statementType- 取值:
STATEMENT:直接执行 SQL,无预编译(易受 SQL 注入风险)。PREPARED(默认):预编译 SQL,参数占位符为#{}。CALLABLE:调用存储过程。
- 示例:
<select statementType="CALLABLE">用于执行存储过程。
- 取值:
useGeneratedKeys- 作用:启用 JDBC 主键回写(如 MySQL 自增 ID),需配合
keyProperty指定接收属性。 - 示例:
<insert useGeneratedKeys="true" keyProperty="id">。
- 作用:启用 JDBC 主键回写(如 MySQL 自增 ID),需配合
timeout- 作用:设置 SQL 执行超时时间(单位:秒),超时抛出异常。
fetchSize- 作用:控制数据库每次返回的最大记录数(优化大数据量查询性能)。
🔄 三、缓存与结果集控制
flushCache- 作用:执行后是否清空一级/二级缓存(默认
false,查询不刷新)。
- 作用:执行后是否清空一级/二级缓存(默认
resultSetType- 取值:
FORWARD_ONLY(默认):单向遍历结果集。SCROLL_SENSITIVE:可滚动且敏感(实时反映数据库变化)。SCROLL_INSENSITIVE:可滚动但不敏感(快照模式)。
- 取值:
useCache- 作用:是否将结果存入二级缓存(默认
true)。
- 作用:是否将结果存入二级缓存(默认
📌 四、动态 SQL 相关属性
databaseId- 作用:指定数据库厂商(如
mysql、oracle),用于多数据库适配。
- 作用:指定数据库厂商(如
lang- 作用:指定动态 SQL 语言驱动(如自定义脚本语言)。
总结
MyBatis 的 statement 属性通过灵活配置平衡了 SQL 控制力与开发效率,核心在于:
- 基础映射:
id、resultType/resultMap实现对象关系映射。 - 性能优化:
timeout、fetchSize等提升执行效率。 - 安全与扩展:
statementType和动态 SQL 支持复杂场景。
到此这篇关于MyBatis Mapper.xml核心属性详解的文章就介绍到这了,更多相关MyBatis Mapper.xml核心属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
