- 前言
- 一、常用属性
- 二、SQL定义标签
- 1. select
- 2. insert
- 3. update
- 4. delete
- 5. resultMap
- 6. sql
- 三、SQL动态标签
- 1. if
- 2. foreach
- 3. choose/when/otherwise
- 4. where
- 5. set
前言
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 的真正强大在于它的语句映射,这是它的魔力所在,使映射器的 XML 文件显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。
继springBoot整合myBatis完整前后端项目实例后,本文详细介绍下mybatis常用标签的使用。
一、常用属性
| 属性 | 描述 |
|---|---|
| id | 在命名空间中唯一的标识符,被用来引用这条语句 |
| parameterType | 传入这条语句的参数的类全限定名或别名 |
| resultType | 期望从这条语句中返回结果的类全限定名或别名,resultType 和 resultMap 之间只能同时使用一个 |
| resultMap | 在命名空间中唯一的标识符,被用来引用这条语句 ,resultType 和 resultMap 之间只能同时使用一个 |
| flushCache | 将其设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认值:对于(select语句)false ;对于( insert、update 和 delete 语句)true |
| useCache | 将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对于(select语句)为 true |
| useGeneratedKeys | (仅适用于 insert 和 update)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系型数据库管理系统的自动递增字段),默认值:false |
| keyProperty | (仅适用于 insert 和 update)指定能够唯一识别对象的属性,MyBatis 会使用 getGeneratedKeys 的返回值或 insert 语句的 selectKey 子元素设置它的值,默认值:未设置(unset) |
用于数据查询操作,例:
2. insert用于数据保存操作,例:
insert into user_info ( userName, userSex )values( #{userName}, #{userSex} )
PS:keyProperty属性可返回此条插入数据的主键值
3. update用于数据更新操作,例:
4. deleteupdate user_info set userName=#{userName} where id=#{keyId}
用于数据删除操作,例:
5. resultMapdelete from user_info where id=#{keyId}
SQL返回与实体类映射关系信息,例:
6. sql
用于定义可重用的 SQL 代码片段,以便在多个SQL语句中使用。 参数可以静态地(在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值。例:
${alias}.userName,${alias}.userSex
三、SQL动态标签 1. if
单个条件判断,用以实现条件筛选,例:
PS:此处需要注意,如果参数值为数字int型,判断是否等于某个固定值时可能会导致判断失效,例如:
……
可以修改为:
……
或
2. foreach……
用于更新或保存数据时的批量操作,例:
insert into user_info( userName, userSex )values( #{item.userName}, #{item.userSex} )
insert into user_info( userName )values( #{userName} )
update user_info
set userAge=#{userAge}
where id in
#{item}
3. choose/when/otherwise
用以实现条件的多种判断,类似与if else,例:
4. where只会在子元素返回任何内容的情况下才插入 “WHERe” 子句,并且可以自动处理判断条件语句返回的第一个and或or,例:
不使用where标签时,若userSex为空,语法错误会报错:
修改为:
5. set可以动态更新需要更新的列,忽略其它不更新的列,例:
update user_info where id=#{keyId} userName=#{userName}, userSex=#{userSex}



