resultMap
简介:
当您在 MyBatis 中使用 <resultMap>
时,它允许您定义一个复杂的结果映射策略,将数据库查询结果映射到 Java 对象。以下是 <resultMap>
的一些关键特性和用法:
-
映射结果集:
<resultMap>
允许您将 SQL 查询的结果集列映射到 Java 对象的属性。
-
类型安全:
- 通过使用
<resultMap>
,您可以确保类型安全,因为 MyBatis 会自动处理从数据库列到 Java 对象属性的转换。
- 通过使用
-
复杂映射:
<resultMap>
支持复杂的映射需求,例如关联查询和嵌套查询。
-
提高性能:
- 使用
<resultMap>
可以提高性能,因为它允许 MyBatis 重用预先配置的映射规则。
- 使用
-
扩展性:
<resultMap>
可以继承其他<resultMap>
,实现映射规则的重用和扩展。
-
配置方式:
<resultMap>
通常在 MyBatis 的映射 XML 文件中定义。
-
id 属性:
- 每个
<resultMap>
必须有一个唯一的id
属性,用于标识这个映射规则。
- 每个
-
result 元素:
<resultMap>
内部使用<result>
元素来指定列到属性的映射。
-
association 元素:
- 使用
<association>
元素来映射关联查询的结果,例如一对一关系。
- 使用
-
collection 元素:
- 使用
<collection>
元素来映射集合查询的结果,例如一对多或多对多关系。
- 使用
-
discriminator 元素:
- 使用
<discriminator>
元素来实现基于某列值的区分映射,常用于处理继承或多表查
- 使用
使用举例
Where标签
在MyBatis中,<where>
标签用于动态构造SQL语句的WHERE
子句。它允许你在映射文件中定义条件,这些条件可以包含在SQL语句中,并且可以通过MyBatis的脚本特性进行动态拼接。
以下是 <where>
标签的一些关键用法:
-
动态SQL:
<where>
标签可以与<if>
、<choose>
、<when>
、<otherwise>
等子标签一起使用,实现条件语句的动态拼接。
-
条件过滤:
- 通常用于根据传递给查询方法的参数动态构造
WHERE
子句的条件。
- 通常用于根据传递给查询方法的参数动态构造
-
嵌套使用:
<where>
标签可以包含其他<where>
或条件标签,以实现更复杂的条件逻辑。
if
when
set
froeach
bind
@Param
缓存机制
缓存的作⽤:通过减少IO的⽅式,来提⾼程序的执⾏效率。
缓存就是指存在内存中的临时数据,使用缓存能够减少和数据库交互的次数,提高效率。将相同查询条件的sql语句执行一遍后得到的结果存在内存或者某种缓存介质中,当下次遇到一模一样的查询sql时候不在执行sql与数据库交互,而是直接从缓存中获取结果,减少服
务器的压力;
mybatis缓存包括:
● ⼀级缓存:将查询到的数据存储到SqlSession中。范围比较小,正对于一次sql会话
● ⼆级缓存:将查询到的数据存储到SqlSessionFactory中。范围比较大,针对于整个数据库级别的。
● 或者集成其它第三⽅的缓存:⽐如EhCache【Java语⾔开发的】、Memcache【C语⾔开发的】等。
缓存只针对于DQL语句,也就是缓存机制只对应select语句。