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

目录
相关文章
|
4天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(下)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
13 0
|
4天前
|
Java 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口(上)
【MySQL × SpringBoot 突发奇想】全面实现流程 · xlsx文件,Excel表格导入数据库的接口
20 0
|
4天前
|
Java
【Java开发指南 | 第二十一篇】Java流之文件
【Java开发指南 | 第二十一篇】Java流之文件
13 0
|
3天前
|
消息中间件 Java Kafka
Java大文件排序(有手就能学会),kafka面试题2024
Java大文件排序(有手就能学会),kafka面试题2024
|
4天前
|
前端开发 关系型数据库 MySQL
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
【MySQL × SpringBoot 突发奇想】全面实现流程 · 数据库导出Excel表格文件的接口
26 0
|
4天前
|
JavaScript Java API
【JavaEE】Spring Boot - 日志文件
【JavaEE】Spring Boot - 日志文件
6 0
|
4天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
11 2
|
4天前
|
安全 JavaScript Java
springboot实现文件防盗链设计
`shigen`,一位专注于Java、Python、Vue和Shell的博主,分享成长和技术。近期将探讨SpringBoot实现图片防盗链,通过限制`Referer`防止资源被盗用。基础版通过`WebMvcConfigurer`配置静态资源,升级版添加拦截器检查`Referer`,确保请求来源合法性。详细代码实现和案例可在文中链接找到。一起学习,每天进步!
46 13
springboot实现文件防盗链设计
|
4天前
|
Java 开发者
Java一分钟之-Java IO流:文件读写基础
【5月更文挑战第10天】本文介绍了Java IO流在文件读写中的应用,包括`FileInputStream`和`FileOutputStream`用于字节流操作,`BufferedReader`和`PrintWriter`用于字符流。通过代码示例展示了如何读取和写入文件,强调了常见问题如未关闭流、文件路径、编码、权限和异常处理,并提供了追加写入与读取的示例。理解这些基础知识和注意事项能帮助开发者编写更可靠的程序。
17 0
|
4天前
|
Java
JDK环境下利用记事本对java文件进行运行编译
JDK环境下利用记事本对java文件进行运行编译
16 0