select
映射查询语句
元素 | 说明 | 备注 |
id | 它和Mapper的命名空间组合起来是唯一的,提供给MyBatis调用 | 如果命名空间和id组合起来不唯一,会抛出异常 |
parameterType | 传入参数的类型;可以给出类全名,也可以给出类别名,使用别名必须是MyBatis内部定义或自定义的;
| 可以选择JavaBean,Map等复杂的参数类型传递给SQL |
resultType | 从这条语句中返回的期望类型的类的完全限定名或别名。 注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。 使用 resultType 或 resultMap,但不能同时使用 | 它是我们常用的参数之一,比如我们总计总条数 就可以把它的值设为int |
resultMap | 外部 resultMap 的命名引用。使用 resultMap 或 resultType,但不能同时使用; 它是映射集的引用,将执行强大的映射功能,我们可以使用resultType或者resultMap其中的一个,resultMap可以给予我们自定义映射规则的机会 | 它是MyBatis最复杂的元素,可以配置映射规则,级联,typeHandler等 |
flushCache | 调用SQL后,是否要求MyBatis清空之前查询的本地缓存和二级缓存 | true/false,默认为false |
useCache | 启动二级缓存开关,是否要求MyBatis将此次结果缓存 | true/false,默认为true |
timeout | 设置超时时间,超时之后抛出异常,秒 | 默认值为数据库厂商提供的JDBC驱动所设置的秒数 |
fetchSize | 获取记录的总条数设定 | 默认值是数据库厂商提供的JDBC驱动所设的条数 |
resultMap
用来描述如何从数据库结果集中来加载对象
元素 | 说明 | 备注 |
id | 当前命名空间中的一个唯一标识,用于标识一个result map. | 如果命名空间和id组合起来不唯一,会抛出异常 |
type | 类的完全限定名, 或者一个类型别名 (内置的别名可以参考上面的表格).
| 可以选择JavaBean,Map等复杂的参数类型传递给SQL |
autoMapping | 如果设置这个属性,MyBatis将会为这个ResultMap开启或者关闭自动映射。这个属性会覆盖全局的属性 autoMappingBehavior。默认值为:unset。 |
子元素
- constructor
<constructor>
<idArg column="id" jdbcType="BIGINT" javaType="java.lang.Long" />
<arg column="user_name" jdbcType="VARCHAR" javaType="java.lang.String" />
</constructor>
- id
属性 | 描述 |
property | POJO中映射到列结果的字段或者属性。如果POJO的属性匹配的是存在的,和给定SQL列名(column元素)相同的,那么MyBatis就会自动映射; |
column | SQL中的列名,或者是列的别名。一般情况下,这和 传递给 resultSet.getString(columnName) 方法的参数一样 |
javaType | 配置的Java的类; |
jdbcType | 配置的数据库的类型; |
typeHandler | 类型处理器,使用这个属性,你可以覆盖默 认的类型处理器。这个属性值是一个类型处理 器实现类的完全限定名,或者是类型别名。 |
- result
注入到字段或 JavaBean 属性的普通结果
id 和 result 都将一个列的值映射到一个简单数据类型(字符串,整型,双精度浮点数,日期等)的属性或字段
两者之间的唯一不同是, id 表示的结果将是对象的标识属性,这会在比较对象实例时用到。 这样可以提高整体的性能,尤其是缓存和嵌套结果映射(也就是联合映射)的时候
- association
复杂类型的关联
•嵌套结果映射 – 关联可以指定为一个 resultMap 元素,或者引用一个
- collection
一个复杂类型的集合
•嵌套结果映射 – 集合可以指定为一个 resultMap 元素,或者引用一个
- discriminator
使用结果值来决定使用哪个 resultMap
case – 基于某些值的结果映射
嵌套结果映射 – 一个 case 也是一个映射它本身的结果,因此可以包含很多相 同的元素,或者它可以参照一个外部的 resultMap
insert, update 和 delete
id | 命名空间中的唯一标识符,可被用来代表这条语句。 |
parameterType | 将要传入语句的参数的完全限定类名或别名。这个属性是可选的,因为 MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数,默认值为 unset。 |
flushCache | 将其设置为 true,任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:true(对应插入、更新和删除语句)。 |
timeout | 这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)。 |
statementType | STATEMENT,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)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
- selectKey
<selectKey keyProperty="id" order="AFTER" resultType="int">
select LAST_INSERT_ID()
</selectKey>
属性 | 描述 |
keyProperty | selectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
keyColumn | 匹配属性的返回结果集中的列名称。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 |
resultType | 结果的类型。MyBatis 通常可以推算出来,但是为了更加确定写上也不会有什么问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。如果希望作用于多个生成的列,则可以使用一个包含期望属性的 Object 或一个 Map。 |
order | 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 - 这和像 Oracle 的数据库相似,在插入语句内部可能有嵌入索引调用。 |
statementType | 与前面相同,MyBatis 支持 STATEMENT,PREPARED 和 CALLABLE 语句的映射类型,分别代表 PreparedStatement 和 CallableStatement 类型。 |
- sql
用来定义可重用的 SQL 代码段,可以包含在其他语句中
参数:向sql语句中传递的可变参数
预编译 #{}:将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号,能够很大程度防止sql注入;
传值 ${}:传入的数据直接显示生成在sql中,无法防止sql注入;
表名、选取的列是动态的,order by和in操作, 可以考虑使用$