@options注解解析
Options是 MyBatis 中用于精细化控制 SQL 执行行为的核心注解专为注解式Insert/Select开发设计用来替代 XML 中的selectKey及全局配置。一、核心作用主键回填插入后自动获取自增 ID最常用缓存控制配置二级缓存刷新 / 使用策略执行调优设置超时、抓取数量、语句类型结果集控制指定结果集滚动、只读等特性二、核心属性全解表格属性类型默认值作用说明useGeneratedKeysbooleanfalse启用主键回填true时JDBC 自动获取数据库自增主键keyPropertyStringJava 对象属性将主键值赋给实体类的哪个字段如idkeyColumnString数据库列名主键列名字段名与属性名不一致时必须指定flushCacheFlushCachePolicyDEFAULT缓存刷新策略TRUE/FALSE/DEFAULT增删改默认刷新useCachebooleantrue是否启用二级缓存false强制不走缓存MyBatistimeoutint-1执行超时单位秒超时抛异常fetchSizeint-1每次抓取行数优化大数据量查询resultSetTypeEnumDEFAULT结果集类型FORWARD_ONLY/SCROLL_INSENSITIVE等statementTypeEnumPREPARED语句类型STATEMENT/PREPARED/CALLABLE存储过程三、高频实战示例1. 插入 主键回填必备Insert(INSERT INTO user(name, age) VALUES(#{name}, #{age})) // 关键配置启用自增主键回填到对象id属性 Options(useGeneratedKeys true, keyProperty id, keyColumn id) int insertUser(User user);效果插入后user.getId()直接拿到新生成的 ID2. 查询禁用缓存 超时控制Select(SELECT * FROM user WHERE id #{id}) Options(useCache false, timeout 5) // 不缓存、5秒超时 User selectById(Long id);3. 批量插入优化Insert(script INSERT INTO user(name, age) VALUES foreach collectionlist itemu separator, (#{u.name}, #{u.age}) /foreach /script) Options(useGeneratedKeys true, keyProperty id) int batchInsertUsers(ListUser userList);四、关键要点Options必须与Insert/Select等注解同用主键回填三要素useGeneratedKeystruekeyPropertykeyColumnXML 等价insert useGeneratedKeystrue keyPropertyid