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) |
mybatis 标签主要分为基础 sql 标签、结果映射标签和动态 sql 标签三大类,核心作用是将 sql 语句与 java 对象进行映射,并支持动态拼接 sql 条件 。
基础 sql 标签怎么用
这类标签直接对应数据库的增删改查操作,每个标签都需要配置唯一的 id 属性来标识该语句 。
- select 标签:用于查询数据库记录,必须指定
id,可选配置parametertype传入参数类型,resulttype或resultmap指定返回结果类型 。resulttype:适用于简单映射,如基本类型、hashmap 或 javabean。resultmap:适用于复杂映射,需预先定义映射规则。- 常用属性还包括
flushcache(是否清空缓存)、usecache(是否使用二级缓存)、timeout(超时时间)等 。
- insert 标签:用于插入数据,支持
usegeneratedkeys="true"和keyproperty配合获取数据库自动生成的主键 。 - update 标签:用于更新数据,通常配合动态 sql 标签实现部分字段更新 。
- delete 标签:用于删除数据,属性配置与 insert 类似 。
- sql 标签:用于定义可复用的 sql 片段,通过
<include refid="片段id"/>在其他语句中引用 。
结果映射怎么配
当数据库列名与 java 对象属性名不一致,或需要处理关联关系时,使用 resultmap 标签进行自定义映射 。
- 基本映射:
<id property="id" column="id"/>:映射主键字段。<result property="name" column="name"/>:映射普通字段,解决大小写或命名不一致问题 。
- 关联关系映射:
<association property="user" javatype="user" select="selectuserbyid" column="user_id"/>:实现一对一关联,可配合另一个查询封装结果 。<collection property="orders" oftype="order" select="selectordersbyuserid" column="user_id"/>:实现一对多关联,oftype指定集合中元素的类型 。
- 继承关系:可通过
extends属性继承其他 resultmap,避免重复配置 。
动态 sql 标签有哪些
动态 sql 是 mybatis 的核心优势,可根据参数条件动态拼接 sql 语句,避免手动拼接导致的语法错误 。
- if 标签:最常用的条件判断标签,根据
test属性中的表达式决定是否包含内部 sql 片段 。- 语法:
<if test="条件表达式">sql 片段</if> - 注意:
test中访问的是传入对象的属性,如gender != null,不是数据库字段 。
- 语法:
- choose/when/otherwise 标签:类似 java 的 switch-case 语句,按顺序判断 when 条件,第一个成立则结束,都不成立则执行 otherwise 。
- 语法:
<choose><when test="...">...</when><otherwise>...</otherwise></choose>
- 语法:
- where 标签:智能处理 where 子句,只在内部子元素有内容时才插入 where 关键字,并自动去除开头的 and 或 or 。
- 作用:避免出现"where and"的错误 sql。
- 注意:不要在 where 标签内使用注释,否则可能导致语法错误 。
- set 标签:用于 update 语句中生成 set 子句,自动剔除末尾多余的逗号 。
- 作用:配合 if 标签实现动态更新部分字段,某字段为 null 时不更新 。
- foreach 标签:用于构建 in 条件,对集合进行迭代,常用于批量删除、批量添加等操作 。
- 关键属性:
collection(迭代的集合,如 list/array/map)、item(当前元素别名)、index(当前下标)、open/close/separator(前后缀和分隔符)。
- 关键属性:
- trim 标签:更灵活的格式化标签,可自定义 prefix、suffix、prefixoverrides、suffixoverrides,where 和 set 标签底层都基于 trim 实现 。
- bind 标签:用于在配置中定义变量绑定,可简化复杂的 sql 语句,如模糊查询时避免多次字符串拼接 。
到此这篇关于mybatis标签详解(最新整理)的文章就介绍到这了,更多相关mybatis标签详解内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论