MyBatis属性详解

SELECT属性配置
属性描述取值默认
id在这个模式下唯一的标识符,可被其它语句引用  
parameterType传给此语句的参数的完整类名或别名  
resultType语句返回值类型的整类名或别名。注意,如果是集合,
那么这里填写的是集合的项的整类名或别名,而不是集合本身的类名。
(resultType 与resultMap 不能并用)
  
resultMap引用的外部resultMap 名。结果集映射是MyBatis 中最强大的特性。
许多复杂的映射都可以轻松解决。(resultType 与resultMap 不能并用)
  
flushCache如果设为true,则会在每次语句调用的时候就会清空缓存。select 语句默认设为falsetrue|falsefalse
useCache如果设为true,则语句的结果集将被缓存。select 语句默认设为false true|false false
timeout 设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定
true|falsefalse
timeout设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定正整数未设置
fetchSize设置一个值后,驱动器会在结果集数目达到此数值后,
激发返回,默认为不设值,由驱动器自己决定
正整数驱动器决定
statementTypestatement,preparedstatement,callablestatement。
预准备语句、可调用语句
STATEMENT
PREPARED
CALLABLE
PREPARED
resultSetTypeforward_only,scroll_sensitive,scroll_insensitive
只转发,滚动敏感,不区分大小写的滚动
FORWARD_ONLY
SCROLL_SENSITIVE
SCROLL_INSENSITIVE
驱动器决定

Insert属性配置
属性描述取值默认
id在这个模式下唯一的标识符,可被其它语句引用  
parameterType传给此语句的参数的完整类名或别名  
flushCache如果设为true,则会在每次语句调用的时候就会清空缓存。select 语句默认设为falsetrue|falsefalse
useCache如果设为true,则语句的结果集将被缓存。select 语句默认设为false true|false false
timeout 设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定
true|falsefalse
timeout设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定正整数未设置
fetchSize设置一个值后,驱动器会在结果集数目达到此数值后,激发返回,默认为不设值,由驱动器自己决定正整数驱动器决定
statementTypestatement,preparedstatement,callablestatement。
预准备语句、可调用语句
STATEMENT
PREPARED
CALLABLE
PREPARED
useGeneratedKeys

告诉MyBatis 使用JDBC 的getGeneratedKeys 方法来获取数据库自己生成的主键(MySQL、SQLSERVER 等

关系型数据库会有自动生成的字段)。默认:false

true|falsefalse
keyProperty

标识一个将要被MyBatis 设置进getGeneratedKeys 的key 所返回的值,或者为insert 语句使用一个selectKey

子元素。

  

selectKey属性配置
属性描述取值
keyPropertyselectKey 语句生成结果需要设置的属性。 
resultType生成结果类型,MyBatis 允许使用基本的数据类型,包括String 、int类型。 
order可以设成BEFORE 或者AFTER,如果设为BEFORE,那它会先选择主键,
然后设置keyProperty,再执行insert语句;如果设为AFTER,它就先运行insert 语句再运行selectKey 语句,
通常是insert 语句中内部调用数据库(像Oracle)内嵌的序列机制。
BEFORE
AFTER
statementType像上面的那样, MyBatis 支持STATEMENT,PREPARED和CALLABLE 的语句形式,
 对应Statement ,PreparedStatement 和CallableStatement 响应
STATEMENT
PREPARED
CALLABLE

UPDATE和DELETE属性配置
属性描述取值默认
id在这个模式下唯一的标识符,可被其它语句引用  
parameterType传给此语句的参数的完整类名或别名  
flushCache如果设为true,则会在每次语句调用的时候就会清空缓存。select 语句默认设为falsetrue|falsefalse
useCache如果设为true,则语句的结果集将被缓存。select 语句默认设为false true|false false
timeout 设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定
true|falsefalse
timeout设置驱动器在抛出异常前等待回应的最长时间,默认为不设值,由驱动器自己决定正整数未设置
fetchSize设置一个值后,驱动器会在结果集数目达到此数值后,激发返回,默认为不设值,由驱动器自己决定正整数驱动器决定
statementTypestatement,preparedstatement,callablestatement。
预准备语句、可调用语句
STATEMENT
PREPARED
CALLABLE
PREPARED

Mybatis内置类型别名
别名映射的类型
_bytebyte
_longlong
_shortshort
_intint
_integerint
_doubledouble
_floatfloat
_booleanboolean
stringString
byteByte
longLong
shortShort
intInteger
integerInteger
doubleDouble
floatFloat
booleanBoolean
dateDate
decimalBigDecimal
bigdecimalBigDecimal
objectObject
mapMap
hashmapHashMap
listList
arraylistArrayList
collectionCollection
iteratorIterator

Mybatis内置TypeHandler
类型处理器Java 类型JDBC 类型
BooleanTypeHandlerjava.lang.Booleanboolean任何兼容的布尔值
ByteTypeHandlerjava.lang.Byte, byte任何兼容的数字或字节类型
ShortTypeHandlerjava.lang.Shortshort任何兼容的数字或短整型
IntegerTypeHandlerjava.lang.Integerint任何兼容的数字和整型
LongTypeHandlerjava.lang.Longlong任何兼容的数字或长整型
FloatTypeHandlerjava.lang.Float, float任何兼容的数字或单精度浮点型
DoubleTypeHandlerjava.lang.Doubledouble任何兼容的数字或双精度浮点型
BigDecimalTypeHandlerjava.math.BigDecimal任何兼容的数字或十进制小数类型
StringTypeHandlerjava.lang.StringCHAR 和 VARCHAR 类型
ClobTypeHandlerjava.lang.StringCLOB 和 LONGVARCHAR 类型
NStringTypeHandlerjava.lang.StringNVARCHAR 和 NCHAR 类型
NClobTypeHandlerjava.lang.StringNCLOB 类型
ByteArrayTypeHandlerbyte[]任何兼容的字节流类型
BlobTypeHandlerbyte[]BLOB 和 LONGVARBINARY 类型
DateTypeHandlerjava.util.DateTIMESTAMP 类型
DateOnlyTypeHandlerjava.util.DateDATE 类型
TimeOnlyTypeHandlerjava.util.DateTIME 类型
SqlTimestampTypeHandlerjava.sql.TimestampTIMESTAMP 类型
SqlDateTypeHandlerjava.sql.DateDATE 类型
SqlTimeTypeHandlerjava.sql.TimeTIME 类型
ObjectTypeHandlerAny其他或未指定类型
EnumTypeHandlerEnumeration TypeVARCHAR-任何兼容的字符串类型, 作为代码存储(而不是索引)
EnumOrdinalTypeHandlerEnumeration TypeAny compatible NUMERIC or DOUBLE, as the position is stored (not the code itself).

### MyBatis 中使用 Cursor 的 `fetchSize` 属性 为了优化查询性能,在 MyBatis 中可以配置 `fetchSize` 参数来控制数据库驱动程序每次从服务器获取的数据行数。对于大规模数据集,适当设置此参数能够显著减少内存占用并提高效率。 #### 设置 Fetch Size 方法 当定义 SQL 映射语句时,可以通过 XML 或者注解方式指定 `fetchSize` 值: - **XML 方式** 通过 `<select>` 标签中的属性直接设定: ```xml <select id="findUsers" parameterType="int" resultMap="userResultMap" fetchSize="100"> SELECT * FROM users WHERE status = #{status} </select> ``` - **注解方式** 利用 Java 注解的形式应用到接口方法上: ```java @Select("SELECT * FROM users WHERE status=#{status}") @Options(fetchSize=100) List<User> findUsers(@Param("status") int userStatus); ``` 以上两种情况下都将 `fetchSize` 设定为 100 行记录[^4]。 #### 流式查询与游标的结合 除了简单的批量读取外,还可以采用更高效的流式处理模式——即基于 JDBC 游标的实现。这允许逐条而不是一次性加载全部结果集进入 JVM 内存空间内。具体做法如下所示: ```java // Mapper 接口声明 public interface UserMapper { @Select("SELECT * FROM users ORDER BY id") @Options(fetchSize=Integer.MIN_VALUE, useCache=false, flushCache=true) Cursor<User> selectAllAsStream(); } // Service 实现类调用 try (Cursor<User> cursor = mapper.selectAllAsStream()) { while (cursor.hasNext()) { User user = cursor.next(); process(user); // 处理单个对象逻辑 } } catch (Exception e) { log.error(e.getMessage(), e); } ``` 这里特别指出的是将 `fetchSize` 赋予最小整数值 (`Integer.MIN_VALUE`) 可触发某些数据库连接器启用游标机制[^3]。 #### 性能优化建议 - 对于非常大的表操作,推荐优先尝试调整合适的 `fetchSize` 数值; - 如果遇到内存溢出等问题,则应考虑改用游标形式做增量迭代访问; - 尽可能避免不必要的字段检索,仅选取所需列可降低网络传输开销; - 合理规划索引结构有助于加速特定条件下的扫描速度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值