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. 中电金信新捷报:银行客户资源管理领域No.1

    春暖花开,捷报频传 近日,中电金信 客户关系管理系统(CRM) 接连中标 让我们共同见证这波喜讯 01 中电金信凭借优秀的解决方案和丰富的服务案例经验,成功中标某全国性股份制银行同业CRM实施服务采购 ...

  2. Nginx https证书生成

    一.证书和私钥的生成 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 1.创建服务器证书密钥文件 server.key: ...

  3. 鸿蒙OS高级技巧:打造个性化动态Swiper效果

    前言 在鸿蒙OS的广阔天地中,开发者们有机会创造出令人惊叹的用户体验.最近,我着手设计一款具有独特滑动效果的Swiper组件,它在滑动时能够迅速进入视野,同时巧妙地将旧的cell隐藏到视线之外.本文将 ...

  4. 得物自研客服IM中收发聊天消息背后的技术逻辑和思考实现

    本文由得物技术WWQ分享,原题"客服发送一条消息背后的技术和思",本文有修订和改动. 1.引言 在企业IM客服场景中,客服发送一条消息的背后,需要考虑网络通信.前端展示.后端存储以 ...

  5. Python 元类(Meta Class):解密 Python 面向对象编程的幕后推手

    在 Python 编程中,我们每天都在和类打交道,但是你是否也和我一样想过:类本身是什么?是谁创建了类?元类(Meta Class)就是用来创建类的"类".今天让我们一起深入理解这 ...

  6. Royal Elementor Addons Pro v1.3.987 + v1.5.0 elementor网页设计元素组件插件下载

    Royal Elementor Addons Pro elementor网页设计元素组件插件破解版简介&下载 Royal Elementor Addons Pro Nulled Element ...

  7. Redis 源码简洁剖析 14 - Redis 持久化

    Redis 持久化方式 RDB 优势 劣势 AOF 优势 劣势 Redis < 7.0 参考链接 Redis 源码简洁剖析系列 Redis 持久化方式 主要参考 Redis 官方文档:Redis ...

  8. echo输出

    linux中不免经常使用echo进行输出,或输出到屏幕,或输出到文件.但是使用的时候会发现,在想要输出一些需要转义的字符时,例如\t等,它却原样不动的输出了. 使用man命令查看echo的帮助文档,会 ...

  9. VSCode远程开发Linux内核驱动

    受够了Vim的换台电脑就要倒腾N天配置的折磨,受够了Windows下Source Insight眼花的界面.这些软件虽然很多人在用,但是缺点也不少.然而Linux内核代码非常庞大,编译内核又需要在Li ...

  10. Appium_iOS测试脚本(1)

    经过不断的调试WebDriverAgent, 现在终于可以执行ios的自动化测试脚本了, # This sample code uses the Appium python client # pip ...