mybatis SQL映射文件详解

一、 SQL映射文件是什么?

SQL映射文件(SQL Mapping File)是MyBatis框架中用于定义数据库操作的XML文件。它与应用程序的数据访问层进行交互,将Java对象与数据库表之间的映射关系进行配置,并提供了执行SQL语句的方式。

二、SQL的顶级元素

<mapper>元素SQL映射文件的根元素,用于定义和组织整个映射文件。在该元素内部,你可以定义<resultMap>、<select>、<insert>、<update>和<delete>等其他顶级元素。该元素可以包含在一个单独的映射文件中或者通过MyBatis的命名空间特性引入其他映射文件

<resultMap>元素
用于定义如何将查询结果集中的列映射到Java对象的属性。

<select>元素        查询
<delete>元素        删除
<insert>元素        新增
<updete>元素        修改

1.mapper

mapper namespace属性

区别不同的mapper namespace和子元素的id联合保证唯一

绑定DAO接口

namespace的命名必须跟某个接口同名

接口中的方法与映射文件中SQL语句id一一对应

2.select

select是MyBatis中最常用的元素之一

select元素有很多属性,可以详细配置每一条查询语句 id 命名空间中唯一的标识符

接口中的方法与映射文件中的SQL语句id一一对应

parameterType 传入SQL语句的参数类型

resultType SQL语句返回值类型的完整类名或别名

3.parameterType

parameterType 是在 SQL 映射文件中指定输入参数类型的属性。它用于告诉 MyBatis 框架在执行该 SQL 语句时应该如何处理输入参数

有一下几种常用的用法。

1.指定基本类型参数    如int double boolean等

<select id="getUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{userId}
</select>

2.指定自定义类型参数

<select id="insertUser" parameterType="com.example.model.User">
  INSERT INTO users (id, username) VALUES (#{id}, #{username})
</select>

3.使用 Map 作为参数

<select id="getUserById" parameterType="java.util.Map" resultType="com.example.model.User">
  SELECT * FROM users WHERE id = #{id}
</select>

4.resultMap 

 resultMap 是 MyBatis 框架中用于结果映射的元素,用于指定查询结果与 Java 对象之间的映射关系。通过使用 resultMap ,可以定义如何将查询结果中的列映射到 Java 对象的属性上。

以下是 resultMap 的基本用法:

  1. 定义 resultMap 元素:在 SQL 映射文件中,使用 <resultMap > 元素来定义结果映射。
<resultMap id="userResultMap" type="com.example.model.User">
  <id property="id" column="id" />
  <result property="username" column="username" />
  <result property="email" column="email" />
</resultMap>

        2.指定 resultMap 属性:在 SQL 语句中通过 resultMap 属性来指定使用哪个结果映射。可以在 <select><insert><update> 和 <delete> 等元素中使用。

<select id="getUserById" resultMap="userResultMap">
  SELECT * FROM users WHERE id = #{userId}
</select>

3.定义结果映射规则:在 <resultMap > 元素内部,使用 <id> 和 <result> 元素来定义结果映射规则。可以使用 property 属性指定 Java 对象的属性名,使用 column 属性指定查询结果集中的列名。

resultMap元素的属性

id:resultMap的唯一标识

type:映射的结果类型 resultMap元素的子元素

id:指定和数据表主键字段对应的标识属性 设置此项可提高MyBatis性能

result:指定结果集字段和实体类属性的映射关系

association:映射“多对一”或“一对一”关系

collection:映射“一对多”关系

<resultMap id="userResultMap" type="com.example.model.User">
  <id property="id" column="id" />
  <result property="username" column="username" />
  <result property="email" column="email" />
</resultMap>

5.association

        在结果映射中使用 <association> 元素包裹相关属性。

<resultMap id="userResultMap" type="com.example.model.User">
  <id property="id" column="id" />
  <result property="username" column="username" />
  <result property="email" column="email" />

  <association property="role" javaType="com.example.model.Role">
    <id property="roleId" column="role_id" />
    <result property="roleName" column="role_name" />
  </association>
</resultMap>

association 复杂的关联类型,映射一个嵌套JavaBean属性

         多对一或一对一 属性

property:用来映射查询结果子集的实体属性

javaType:完整Java类名或者别名

resultMap:引用外部

resultMap 子元素 :id , result

6.collection

<collection> 元素是 MyBatis 中用于处理一对多关系的结果映射的元素。它允许你在结果映射中描述一个对象与多个关联对象之间的关系。

  1. 在结果映射中使用 <association> 元素包裹相关属性。
<resultMap id="userResultMap" type="com.example.model.User">
  <id property="id" column="id" />
  <result property="username" column="username" />
  <result property="email" column="email" />

  <association property="role" javaType="com.example.model.Role">
    <id property="roleId" column="role_id" />
    <result property="roleName" column="role_name" />
  </association>
</resultMap>

在 <association> 元素中配置关联对象的属性和映射规则。

  • 使用 property 属性指定关联对象在主对象中的属性名。
  • 使用 javaType 属性指定关联对象的类型。
  • 使用 <id> 元素指定关联对象的主键映射规则。
  • 使用 <result> 元素指定其他非主键列的映射规则。

resultType 直接表示返回类型

适用于比较简单直接的数据封装场景

resultMap 是对外部resultMap的引用 能够处理结果集字段名与实体类属性名不一致、或者需要对连接查询结果使用嵌套映射等较为复杂的问题

二者本质上都是基于Map数据结构,不能同时使用

7.MyBatis自动映射

可以根据查询结果集的列名和 Java 对象的属性名自动进行结果映射,简化了手动编写映射规则的过程

自动映射的前提:属性名与字段名一致

自动映射级别:autoMappingBehavior

自动映射行为

resultType

(不支持嵌套映射)

没有嵌套映射的resultMap

有嵌套映射的resultMap

NONE

失效

手工映射

手工映射

PARTIAL

自动映射

自动映射

手工映射

FULL

自动映射

自动映射

自动映射

8.mybatis缓存

  1. 一级缓存(本地缓存):位于 sqlSession 对象的内部,在同一个 sqlSession 中有效。默认情况下,一级缓存是开启的。当执行相同的查询语句时,MyBatis 会首先从一级缓存中查找结果,如果存在则直接返回,避免了对数据库的再次查询。一级缓存是自动的,不需要手动配置。

  2. 二级缓存(全局缓存):位于 sqlSessionFactory 的作用域中,多个 sqlSession 共享同一个缓存。要启用二级缓存,需要在 MyBatis 的配置文件中进行配置。二级缓存可以使用各种缓存实现,如内存缓存、Redis 等。MyBatis 默认的二级缓存实现是 PerpetualCache。

  3. 或者可以使用 useCache 属性来控制某个查询是否使用二级缓存:

    <select id="getUser" resultType="User" useCache="true">
      SELECT * FROM user WHERE id = #{id}
    </select>
    
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值