Mybatis的Mapper文件(通常是以.xml为扩展名的文件)主要用于定义SQL语句和它们与Java接口方法之间的映射关系。以下是Mapper文件中一些常用的配置元素和属性。

一、mapper文件配置详解

(1)namespace:定义Mapper接口对应的唯一命名空间,用于区分不同的Mapper。(常以UserMapper类的全限定名命名)

<mapper namespace="com.example.mapper.UserMapper">
...
</mapper>

(2)<select>|<insert>|<update>|<delete>:分别对应SQL查询、插入、更新和删除操作。

<!--
findById: 是mapper类中的接口方法
parameterType: 是sql中的参数数据类型
resultType: 是执行sql的返回结果,因为id唯一,返回的是一条记录。而数据库中一条记录就是Java中的一个实体类对象。
所以resultType填写的是对应实体类的全限定名。
-->
<select id="findById" parameterType="int" resultType="com.example.domain.User">
select * from user where id = #{id}
</select> <!--
insert: 是mapper类中的接口方法
parameterType: 向数据库中插入的一条记录就是一个实体类对象的数据。所以是实体类的全限定名
jdbcType=INTEGER这类语法是用来明确指定传入参数在数据库中的类型映射
大多数情况下,Mybatis能够根据参数的Java类型自动推断出相应的JDBC类型。
但是,在某些情况下,特别是当参数为null或者类型推断不确定时,显示指定jdbcType可以帮助Mybatis更精确地执行类型转换,避免类型不匹配的错误。
-->
<insert id="insert" parameterType="com.example.domain.User">
insert into User (id,username,password)
values (#{id,jdbcType=INTEGER},#{username,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR})
</insert> <!--
以下是一个动态的可选的insert
prefix,suffix: 使用小括号()将<trim>标签中所有属性括起来
suffixOverrides: 属性之间逗号隔开
-->
<insert id="insertSelective" parameterType="com.example.domain.User">
insert into User (id,username,password)
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null">
id,
</if>
<if test="username != null">
username,
</if>
<if test="password != null">
password,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
#{id,jdbcType=INTEGER},
</if>
<if test="username != null">
#{username,jdbcType=VARCHAR},
</if>
<if test="password != null">
#{password,jdbcType=VARCHAR},
</if>
</trim>
</insert> <!--
更新操作中,修改指定字段的其他属性,set和where的字段都需要赋值,此时paramterType使用实体类的全限定名。
-->
<update id="updateByKeySelective" paramterType="com.example.domain.User">
update user
<set>
<if test="username != null">
username = #{username,jdbcType=VARCHAR}
</if>
<if test="password != null">
password = #{password,jdbcType=VARCHAR}
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update> <!--
parameterType: 需要删除指定id的记录,所以parameterType是id的数据类型: java.lang.Integer
-->
<delete id="deleteById" parameterType="java.lang.Integer">
delete from User
where if = #{id,jdbcType=INTEGER}
</delete>

(3)<resultMap>:复杂结果集的映射,定义如何将查询结果映射到Java对象的属性上。

<resultMap id="UserResultMap" type="com.example.domain.User">
<id property="id" column="user_id"/>
<result property="name" column="username"/>
<association property="address" javaType="com.example.domain.Address">
<id property="addressId" column="address_id"/>
<result property="city" column="city"/>
</association>
</resultMap>

属性:

① id:resultMap的唯一标识

② type:映射的目标对象类型

③ <id>:主键字段映射

④ <result>:普通字段映射

⑤ <association>:关联对象映射

⑥ <collection>:集合属性映射

(4)<sql>(可选):定义可重用的SQL片段,提高代码复用性

<sql id="userColumns">id, username, password</sql>

(5)<include>(结合<sql>使用)

<select id="findAllUsers" resultType="com.example.domain.User">
SELECT
<include refid="userColumns"/>
FROM user
</select>

(6)cache(可选):配置缓存策略,提高查询效率。

<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>

二、mapper文件配置示例

2.1. 实体类和数据库的表字段映射配置(应对实体类属性和表字段命名不统一场景)

<resultMap id="BaseResultMap" type="com.example.domain.User" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="user_name" property="username" jdbcType="VARCHAR" />
<result column="pass_word" property="password" jdbcType="VARCHAR" />
<result column="address" property="address" jdbcType="VARCHAR" />
<result column="birth_day" property="birthday" jdbcType="TIMESTAMP" />
</resultMap>

type:是对应实体类的全限定名;

column="user_name":对应数据库中的字段;

property="username":对应的是实体类属性;

jdbcType="VARCHAR":是其在数据库中字段的数据类型。

— 业精于勤荒于嬉,行成于思毁于随 —

mybatis - [04] mapper文件详解的更多相关文章

  1. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

  2. Mybatis(三) 映射文件详解

    前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...

  3. MyBatis的Mapper文件的foreach标签详解

    MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...

  4. MyBatis Mapper XML 详解

    MyBatis Mapper XML 详解 MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JD ...

  5. MyBatis 映射文件详解(六)

    MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...

  6. 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解

    http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...

  7. idea spring+springmvc+mybatis环境配置整合详解

    idea spring+springmvc+mybatis环境配置整合详解 1.配置整合前所需准备的环境: 1.1:jdk1.8 1.2:idea2017.1.5 1.3:Maven 3.5.2 2. ...

  8. Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

    封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...

  9. MyBatis的动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它 ...

  10. Linux中/proc目录下文件详解

    转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...

随机推荐

  1. 【并查集+dfs】codeforces 1833 E. Round Dance

    题意 输入一个正整数 \(T(1 \leq T \leq 10^4)\),表示接下来输入 \(T\) 组测试用例,对于每一个测试用例: 第一行,输入一个正整数 \(n(2 \leq n \leq 2 ...

  2. docker直接运行vue3源代码npm run dev

    ​有套代码,需要在服务器直接run dev,docker build玩起来. 步骤: 将自己的代码上传到服务器,本例:/home/flow/ruoyi-ui cd到项目根目录 ruoyi-ui,新建D ...

  3. 鸿蒙应用开发从入门到入行 - 篇3:ArkUI布局基础与制作可交互页面

    鸿蒙应用开发从入门到入行 - 篇3:ArkUI布局基础与制作可交互页面 导读:在本篇文章里,您将掌握事件.装饰器.双向绑定等相关知识,并利用所学知识做一个待办列表的案例. 练手案例:登录界面 开始之前 ...

  4. WW中文地名标注:输出*.wwp和*.wpl文件

    链接1:WW中文地名标注工具----3月4日更新增加OZI航点航迹读入 链接2:中文地标库终结者---------WW中的地名/地标中文化(含40万条中文地名)3月4日更新 链接3:地图浏览器

  5. Eclipse IDE最常用的快捷键

    0.运行:Ctrl+F111.启动调试:F112.终止调试:Ctrl+F23.插入断点:Ctrl+Shift+B或双击行前4.单步跳入:F55.单步跳过:F66.跳出方法:F77.直接跳转到下一个断点 ...

  6. Solution Set - “愿所有罗盘都指向那片海洋”

    目录 0.「NOI Simu.」哈希计数 1.「NOI Simu.」运输计划 2.「NOI Simu.」时代的眼泪 3.「Subset」LP 的被动练习 4.「EC Final 2018」「LOJ # ...

  7. 「V 曲闲谈」《hello&bye,days》——记这周

      这周破事儿浓度真的,情绪渗透压巨大失调.   完全没有曲析啊喂,顶多当个阅读时 BGM.() 两度失眠   "砰--"   朦胧之中看见斜上方的室友起身.   "砰- ...

  8. 深入解析 Spring AI 系列:以OpenAI与Moonshot案例为例寻找共同点

    今天,我们将重点探讨对接的业务逻辑.为了帮助大家更直观地掌握其中的规律性,我将通过对比OpenAI与<月之暗面>中的Moonshot两个案例来阐述这一点.通过这样的对比,大家可以更清晰地看 ...

  9. Linux 运维必备 150 个命令汇总

    地址:https://www.linuxcool.com 线上查询及帮助命令 man:全拼manual,用来查看系统中自带的各种参考手册. help:用于显示shell内部命令的帮助信息. 文件和目录 ...

  10. 微服务实战系列(一)-注册中心Springcloud Eureka服务端-copy

    1. 场景描述 springcloud提供了一整套可行的构建分布式系统的方案,使的企业/开发人员能够快速沟通分布式系统,今天快速构建下springcloud的注册中心Eureka. 2. 解决方案 2 ...