mybatis - [04] mapper文件详解
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文件详解的更多相关文章
- Mybatis SQL映射文件详解
Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...
- Mybatis(三) 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- MyBatis的Mapper文件的foreach标签详解
MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...
- MyBatis Mapper XML 详解
MyBatis Mapper XML 详解 MyBatis 真正的力量是在映射语句中.这里是奇迹发生的地方.对于所有的力量,SQL 映射的 XML 文件是相当的简单.当然如果你将它们和对等功能的 JD ...
- MyBatis 映射文件详解(六)
MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...
- 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解
http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...
- 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. ...
- Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...
- MyBatis的动态SQL详解
MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它 ...
- Linux中/proc目录下文件详解
转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...
随机推荐
- 【shell】远程执行shell|多节点并行执行shell|远程执行注意
目录 前提条件 shell远程执行 多节点上并行执行命令的三种方法 方法1 使用bash执行命令 方法2 使用clustershell执行命令--还能收集结果 方法3 使用pdsh 执行命令 远程执行 ...
- macOS 终端可用的 Hex 查看与编辑器
在 Windows 下我们可以使用 WinHex,而在 macOS 平台上,有什么不错的十六进制查看器.编辑器呢? 准备首先,我们创建一个文件用于测试. echo 'welcome' > fil ...
- AutoCAD 2020中文版建筑设计从入门到精通下载链接
AutoCAD 2020中文版建筑设计从入门到精通下载链接 链接:https://pan.baidu.com/s/1EgFHOSKfPrr9Xdp3bNA-pA或https://pan.baidu.c ...
- 阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践
本文由阿里闲鱼技术团队有攸分享,原题"向消息延迟说bybye:闲鱼消息及时到达方案",有修订和改动,感谢作者的分享. 1.引言 IM消息作为闲鱼用户重要的交易咨询工具,核心目标有两 ...
- Python 添加类型标注 | 散发着自由松散气息的代码
Python 添加类型标注 | 散发着自由松散气息的代码 Python 如此简洁,书写者在声明变量时甚至无需考虑类型. 但是简洁与复杂间,是存在一个平衡点的.当我们书写较为复杂的项目时,还是希望可以拥 ...
- Solution Set - “请背诵每条魔法的禁忌”
目录 0.「HAOI 2018」「洛谷 P4494」反色游戏 1.「JSOI 2010」「洛谷 P6029」旅行 2.「CTSC 2017」「洛谷 P3774」最长上升子序列 3.「CTSC 2018 ...
- 前端(一)-Html
1.网页基本信息 <!DOCTYPE html> 浏览器使用的规范 <head> 网页头 <body> 主体部分 <meta> 元数据 meta的nam ...
- 阿里云产品之数据中台架构-copy
1. 场景描述 客户打包买了很多阿里云的产品,但是阿里云不负责实施,基于阿里云产品与客户需求,拟采用的数据中台架构,有类似需求的,可以参考下,拿走不谢! 2. 解决方案 阿里产品大数据架构图: 从下到 ...
- linux:配置NTP
介绍 网络时间协议(Network Time Protocol,NTP),用于同步网络中各个计算机的时间的协议.其用途是将计算机的时钟同步到世界协调时 UTC. ntpd(Network Time P ...
- Java线程的创建和常见方法
1.线程,进程和管程 1.1线程(Thread) 定义:线程是操作系统中能够独立运行的最小单位,是进程的一个执行分支.一个进程可以包含多个线程,它们共享同一进程的资源(如内存和文件句柄). 特点: 线 ...