Open Source, Open Future!
  menu
107 文章
ღゝ◡╹)ノ❤️

mybatis---映射器

顶级元素

名称说明
cache 命名空间的缓存配置
cache-ref引用其他命名空间的缓存配置
resultMap 自定义映射规则
parameterMap已废弃
sql可重用的语句块
insert插入语句
update更新语句
delete删除语句
select查询语句

select

   属性    说明
id在命名空间中唯一的标识符,可以被用来引用这条语句
parameterType将会传入这条语句的参数类的完全限定名或别名;
这个属性是可选的,因为 MyBatis 可以通过类型处理器(TypeHandler) 推断出具体传入语句的参数;
默认值为未设置(unset)。
parameterMap已废弃
resultType从这条语句中返回的期望类型的类的完全限定名或别名;
注意如果返回的是集合,那应该设置为集合包含的类型,而不是集合本身;
可以使用 resultType 或 resultMap,但不能同时使用。
resultMap外部 resultMap 的命名引用;
结果集的映射是 MyBatis 最强大的特性,如果你对其理解透彻,许多复杂映射的情形都能迎刃而解;
可以使用 resultMap 或 resultType,但不能同时使用。
flushCache将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空;
默认值:false。
useCache将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来;
默认值:对 select 元素为 true。
timeout这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数;
默认值为未设置(unset)(依赖驱动)。
fetchSize这是一个给驱动的提示,尝试让驱动程序每次批量返回的结果行数和这个设置值相等。 默认值为未设置(unset)(依赖驱动)。
statementTypeSTATEMENT,PREPARED 或 CALLABLE 中的一个;
这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement;
默认值:PREPARED。
resultSetTypeFORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 或 DEFAULT(等价于 unset) 中的一个;
默认值为 unset (依赖驱动)。
databaseId如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;
如果带或者不带的语句都有,则不带的会被忽略。
resultOrdered这个设置仅针对嵌套结果 select 语句适用;
如果为 true,就是假设包含了嵌套结果集或是分组,这样的话当返回一个主结果行的时候,就不会发生有对前面结果集的引用的情况;
这就使得在获取嵌套的结果集的时候不至于导致内存不够用;
默认值:false。
resultSets这个设置仅对多结果集的情况适用;
它将列出语句执行后返回的结果集并给每个结果集一个名称,名称是逗号分隔的

insert & update & delete

属性说明
id命名空间中的唯一标识符,可被用来代表这条语句。
parameterType将要传入语句的参数的完全限定类名或别名;
这个属性是可选的,因为 MyBatis 可以通过类型处理器推断出具体传入语句的参数;
默认值为未设置(unset)。
parameterMap已废弃
flushCache将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空;
默认值:true(对于 insert、update 和 delete 语句)。
timeout这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数;
默认值为未设置(unset)(依赖驱动)。
statementTypeSTATEMENT,PREPARED 或 CALLABLE 的一个;
这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement;
默认值:PREPARED。
useGeneratedKeys(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段);
默认值:false。
keyProperty(仅对 insert 和 update 有用)唯一标记一个属性;
MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值;
默认值:未设置(unset);
如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
keyColumn(仅对 insert 和 update 有用)通过生成的键值设置表中的列名;
这个设置仅在某些数据库(像 PostgreSQL)是必须的;
当主键列不是表中的第一列的时候需要设置;
如果希望使用多个生成的列,也可以设置为逗号分隔的属性名称列表。
databaseId如果配置了数据库厂商标识(databaseIdProvider),MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;
如果带或者不带的语句都有,则不带的会被忽略。

selectKey

属性描述
keyPropertyselectKey 语句结果应该被设置的目标属性;
如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
keyColumn匹配属性的返回结果集中的列名称;
如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
resultType结果的类型;
MyBatis 通常可以推断出来,但是为了更加精确,写上也不会有什么问题;
MyBatis 允许将任何简单类型用作主键的类型,包括字符串;
如果希望作用于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map。
order这可以被设置为 BEFORE 或 AFTER;
如果设置为 BEFORE,那么它会首先生成主键;
设置 keyProperty 然后执行插入语句;
如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 中的语句 - 这和 Oracle 数据库的行为相似,在插入语句内部可能有嵌入索引调用。
statementType与前面相同,MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。

ResultMap

属性说明
id当前命名空间中的一个唯一标识,用于标识一个结果映射。
type类的完全限定名, 或者一个类型别名(关于内置的类型别名,可以参考上面的表格)。
autoMapping如果设置这个属性,MyBatis将会为本结果映射开启或者关闭自动映射;
这个属性会覆盖全局的属性 autoMappingBehavior;
默认值:未设置(unset)。

id & result

属性说明
property映射到列结果的字段或属性;
如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用;
否则 MyBatis 将会寻找给定名称的字段;
无论是哪一种情形,你都可以使用通常的点式分隔形式进行复杂属性导航;
比如,你可以这样映射一些简单的东西:“username”,或者映射到一些复杂的东西上:“address.street.number”。
column数据库中的列名,或者是列的别名;
一般情况下,这和传递给 resultSet.getString(columnName) 方法的参数一样。
javaType一个 Java 类的完全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格);
如果你映射到一个 JavaBean,MyBatis 通常可以推断类型;
然而,如果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证行为与期望的相一致。
jdbcTypeJDBC 类型,所支持的 JDBC 类型参见这个表格之后的“支持的 JDBC 类型”;
只需要在可能执行插入、更新和删除的且允许空值的列上指定 JDBC 类型;
这是 JDBC 的要求而非 MyBatis 的要求;
如果你直接面向 JDBC 编程,你需要对可能存在空值的列指定这个类型。
typeHandler使用这个属性,你可以覆盖默认的类型处理器;
这个属性值是一个类型处理器实现类的完全限定名,或者是类型别名。