Java--SpringBoot-35-Mybatis-3-映射文件详解1

简介: 今天详细看下Mybatis mapper映射文件,由于MyBatis强大的语句映射,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。

今天详细看下Mybatis mapper映射文件,由于MyBatis强大的语句映射,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。

官网:https://mybatis.org/mybatis-3/zh/sqlmap-xml.html

image.png

我们按照上图红框的顺序来看下这几个顶级元素标签:

SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序):

cache – 给定命名空间的缓存配置。

cache-ref – 其他命名空间缓存配置的引用。

resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象

sql – 可被其他语句引用的可重用语句块。

insert – 映射插入语句

update – 映射更新语句

delete – 映射删除语句

select – 映射查询语句


一、缓存 <cache/>

       得了,官网写的够明白了,截图:

image.png


二、自定义缓存:

       嗨!这官网。厉害,一会我把原文直接贴成官网,点击阅读原文去官网查看吧。

image.png

三、resultMap – 用来描述如何从数据库结果集中来加载对象

<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.xing.mapper.UserMapper"><resultMapid="BaseResultMap"type="com.xing.entity.UserEntity"autoMapping="true"><resultcolumn="id"jdbcType="INTEGER"property="id"/><resultcolumn="user_name"jdbcType="VARCHAR"property="userName"/><resultcolumn="pass_word"jdbcType="VARCHAR"property="passWord"/><resultcolumn="real_name"jdbcType="VARCHAR"property="realName"/></resultMap></mapper>

       可以看到以上代码就实现了数据库表user(UserMapper)及字段和属性的映射,详解可以看官网:

image.png

四、sql

       <sql/>用来定义可重用的 SQL 代码片段,以便在其它语句中使用。参数可以静态地(在加载的时候)确定下来,并且可以在不同的 include 元素中定义不同的参数值。

<sql id="userColumns"> ${alias}.id,${alias}.username,${alias}.password </sql>

这个 SQL 片段可以在其它语句中使用,例如:


<selectid="selectUsers"resultType="map">select<includerefid="userColumns"><propertyname="alias"value="t1"/></include>,
<includerefid="userColumns"><propertyname="alias"value="t2"/></include>fromsome_tablet1crossjoinsome_tablet2</select>

也可以在 include 元素的 refid 属性或内部语句中使用属性值,例如:

<sqlid="sometable">${prefix}Table</sql><sqlid="someinclude">from<includerefid="${include_target}"/></sql><selectid="select"resultType="map">selectfield1, field2, field3<includerefid="someinclude"><propertyname="prefix"value="Some"/><propertyname="include_target"value="sometable"/></include></select>


五、insert

       新增、更新、删除的标签属性都差不多:


image.png

<insertid="insert"parameterType="com.xing.entity.UserEntity">insertintouser    (id, userName, passWord,realName)
values    (#{id,jdbcType=INTEGER}, #{username,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},#{realname,jdbcType=VARCHAR})
</insert>


六、update

<updateid="updateByExampleSelective"parameterType="map">updateuser<set><iftest="record.id != null">id=#{record.id,jdbcType=INTEGER},
</if><iftest="record.username != null">userName=#{record.username,jdbcType=VARCHAR},
</if><iftest="record.password != null">passWord=#{record.password,jdbcType=VARCHAR},
</if><iftest="record.realname != null">realName=#{record.realname,jdbcType=VARCHAR},
</if></set><iftest="_parameter != null"><includerefid="Update_By_Example_Where_Clause"/></if></update>


七、delete

<deleteid="deleteByPrimaryKey"parameterType="java.lang.Integer">deletefromuserwhereid=#{id,jdbcType=INTEGER}
</delete>


八、Select 查询

<selectid="getOne"resultType="com.xing.entity.UserEntity"parameterType="int"flushCache="false"useCache="true"timeout="10000"fetchSize="256"statementType="PREPARED">select*fromuserwhereid=#{id}
</select>

image.png



总结:

       Mybatis mapper xml文件的几个顶级元素,点击”阅读原文“可以直接到Mybatis中文网,每个标签及属性都写的明明白白的。



END

目录
相关文章
|
1月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
164 1
|
2月前
|
SQL Java 数据库连接
MyBatis 的映射关系
MyBatis 核心功能之一是映射关系,支持一对一、一对多和多对多三种 ORM 映射。通过实体类与配置文件结合,开发者可灵活实现数据关联,提升数据库操作效率。
254 4
|
8月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
4月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
254 14
|
4月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
135 0
|
4月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
306 0
|
5月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
467 5
|
6月前
|
SQL XML Java
菜鸟之路Day35一一Mybatis之XML映射与动态SQL
本文介绍了MyBatis框架中XML映射与动态SQL的使用方法,作者通过实例详细解析了XML映射文件的配置规范,包括namespace、id和resultType的设置。文章还对比了注解与XML映射的优缺点,强调复杂SQL更适合XML方式。在动态SQL部分,重点讲解了`&lt;if&gt;`、`&lt;where&gt;`、`&lt;set&gt;`、`&lt;foreach&gt;`等标签的应用场景,如条件查询、动态更新和批量删除,并通过代码示例展示了其灵活性与实用性。最后,通过`&lt;sql&gt;`和`&lt;include&gt;`实现代码复用,优化维护效率。
578 5
|
5月前
|
网络协议 安全 Java
实现Java语言的文件断点续传功能的技术方案。
像这样,我们就完成了一项看似高科技、实则亲民的小工程。这样的技术实现不仅具备实用性,也能在面对网络不稳定的挑战时,稳稳地、不失乐趣地完成工作。
333 0
|
8月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
下一篇
oss云网关配置