Mybatis 映射配置文件的标签总结:
一、标签分类
1.定义SQL语句
增insert标签
删delete标签
改update标签
查select标签
2.配置关联关系
关联的是集合:collection标签
;关联的是单个对象 :association标签
两者都是用于resultMap返回关联映射
标签属性:
1.property
resultMap返回实体类中字段和result标签中的property一样
2.column
数据库的列名或者列标签别名,是关联查询往下一个语句传送值。注意: 在处理组合键时,您可以使用column=“{prop1=col1,prop2=col2}”这样的语法,设置多个列名传入到嵌套查询语句。这就会把prop1和prop2设置到目标嵌套选择语句的参数对象中。
3.javaType
一般为ArrayList或是java.util.List
4.ofType
要解决关联集合的映射 ofType 是指定集合元素的类型。java的实体类,对应数据库表的列名称,即关联查询select对应返回的类
5.select
执行一个其他映射的sql语句返回一个java实体类型
3.配置java对象属性与查询结果集中列名的对应关系
resultMap标签:
通过resultMap来配置关联查询的结果
属性:
id
唯一标识 ;
type
返回类型;
extends
继承别的resultMap(可选)
关联其他标签:
id
设置主键使用,使用此标签配置映射关系(可能不止一个)
result
一般属性的配置映射关系,一般不止一个
association
关联一个对象使用
collection
关联一个集合使用
4.控制动态SQL拼接
foreach标签
属性:
collection
循环的集合。传的是集合为list,数组为array, 如果是map为java.util.HashMap
item
循环的key
index
循环的下表顺序
open
循环的开头
close
循环结束
separator
循环的分隔符
if标签
基本都是用来判断值是否为空,注意Integer的判断,mybatis会默认把0变成 ‘’
choose标签
5.格式化输出
where用来去掉多条件查询时,开头多余的and(可配合if标签使用)
当在update语句中使用if标签时,如果前面的if没有执行,则会导致逗号多余错误。
使用set标签可以将动态的配置SET 关键字,并且去除追加到条件末尾的任何不相关的逗号。
没有使用if标签时,如果有一个参数为null,都会导致错误。
全能的,trim标记是一个格式化的标记,可以完成set或where标记的功能
属性:
prefixOverrides
,suffixOverrides
表示覆盖内容,如果只有这两个属性表示删除内容
prefix、suffix 表示再trim标签包裹部分的前面或后面添加内容(注意:是没有prefixOverrides,suffixOverrides的情况下)
6.定义常量
定义一些常用的sql语句片段
7.其他
引用其他的常量,通常和sql一起使用
二、标签应用
1.查询<select>
标签用于定义查询
-
查询返回list
-
当map 作为参数时 映射配置为#{key}
特殊符号的处理
方式1:使用转义字符
方式2:使用 CDATA 标记。
2.修改<update>
标签用于定义修改
传参异常: org.apache.ibatis.binding.BindingException:
Parameter ‘password’ not found. Available parameters are [arg1, arg0, param1, param2]
修改方法:
mepper接口传递参数时:
(1)内置参数名是arg(索引) 从0开始.
(2)内置参数名是param(序号) 从1开始.
(3)按照命名参数来传递 使用mybatis框架的@Param 注解
- 注解绑定好之后, mapper配置文件中可以按照名称来配置了。
3.删除<delete>
标签用于定义删除
- 当
参数
个数只有一个
的时候 标签里的#{ }大括号随便写
*
4.新增<insert>
标签用于定义新增。
标签属性:
id:
设置为接口的方法名。
parameterType
:mybatis注册的别名可以不写。自己 定义的别名要标注
useGeneratedKeys
="true"表示使用数据库中自动生成的主键回填实体对象
keyProperty
:对象的主键即指定实体的主键对应的属性
keyColumn
:数据库主键即指定数据库中的主键列的名字
- 当
参数
是一个对象的时候 标签里的#{ }大括号里必须是对象的属性
5.增insert/ 改update/删delete共同的属性
-
id
唯一的名称,对应dao中mapper的接口方法的名称 -
parameter
Type 将要传入语句的参数的完全限定类名或别名(可以自己注册)。这个属性是可选的,因为 MyBatis 可以通过 TypeHandler 推断出具体传入语句的参数,默认值为 unset。 -
flushCache
将其设置为 true,表示是否会刷新缓存,即任何时候只要语句被调用,都会导致本地缓存和二级缓存都会被清空,默认值:true(对应插入、更新和删除语句)。 -
timeout
指定超时时间,单位是秒。默认未设置,使用驱动的设置值。即这个设置是在抛出异常之前,驱动程序等待数据库返回请求结果的秒数。默认值为 unset(依赖驱动)。 -
statementType
STATEMENT,PREPARED 或 CALLABLE 的一个。默认值:PREPARED。这会让 MyBatis 分别使用 Statement,PreparedStatement 或 CallableStatement,当需要访问存储过程时,考虑使用CALLABLE -
useGeneratedKeys
(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server这样的关系数据库管理系统的自动递增字段, oracle使用序列是不支持的,通过selectKey可以返回主键),默认值:false。 -
keyProperty
(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 -
keyColumn
(仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像PostgreSQL)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。 -
databaseId
如果配置了 databaseIdProvider,MyBatis 会加载所有的不带 databaseId 或匹配当前 databaseId 的语句;如果带或者不带的语句都有,则不带的会被忽略。