MyBatis 映射文件(Mapper XML):配置与使用
MyBatis 映射文件(Mapper XML):配置与使用
MyBatis是一个强大的Java持久化框架,它允许您将SQL查询、插入、更新和删除等操作与Java方法进行映射。这种映射是通过MyBatis的映射文件,通常称为Mapper XML文件来实现的。本文将深入探讨什么是MyBatis的映射文件以及如何配置和使用它们。
什么是 MyBatis 映射文件?
MyBatis的映射文件(Mapper XML文件)是用于定义SQL语句和Java方法之间映射关系的XML配置文件。这些文件提供了以下功能:
-
定义 SQL 查询和操作: 在Mapper XML文件中,您可以定义SQL查询、插入、更新、删除等操作。这些SQL语句可以包含参数和结果映射。
-
参数映射: 您可以在Mapper XML文件中指定如何映射方法的参数到SQL语句中的参数。这通常使用
#{}
占位符完成。 -
结果映射: 您可以定义如何将SQL查询的结果映射到Java对象中。这通常使用
<result>
元素来完成。 -
命名空间: 每个Mapper XML文件都有一个唯一的命名空间,用于标识这个Mapper的作用域。Mapper接口通常与Mapper XML文件的命名空间相对应。
-
动态 SQL: Mapper XML文件还支持动态SQL,使您能够根据条件生成不同的SQL查询。
一个简单的Mapper XML文件示例如下:
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><select id="getUserById" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select>
</mapper>
在上述示例中,我们定义了一个名为getUserById
的查询操作,它将根据id
参数查询用户,并将结果映射到com.example.model.User
类型的对象中。
配置 MyBatis 映射文件
要使用MyBatis的映射文件,您需要执行以下步骤:
步骤 1:创建 Mapper XML 文件
首先,创建一个Mapper XML文件,通常存放在项目的classpath下的一个目录中,例如src/main/resources/mapper
。
<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper"><!-- 查询用户信息 --><select id="getUserById" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select><!-- 插入用户信息 --><insert id="insertUser" parameterType="com.example.model.User">INSERT INTO users (username, email) VALUES (#{username}, #{email})</insert>
</mapper>
在上述示例中,我们定义了两个操作:getUserById
和insertUser
,分别用于查询用户和插入用户信息。
步骤 2:配置 MyBatis
要使用Mapper XML文件,需要在MyBatis的配置文件中引入它们。MyBatis的配置文件通常是mybatis-config.xml
,您需要在其中配置Mapper XML文件的路径。
<!-- mybatis-config.xml -->
<configuration><mappers><mapper resource="mapper/UserMapper.xml"/></mappers>
</configuration>
在上述配置中,我们使用<mappers>
元素引入了Mapper XML文件,使用<mapper>
元素的resource
属性指定了XML文件的路径。
步骤 3:创建 Mapper 接口
通常情况下,会创建一个Java接口来定义SQL操作的方法,并使用注解来绑定Mapper XML文件中的SQL操作。
package com.example.mapper;import com.example.model.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(int id);@Insert("INSERT INTO users (username, email) VALUES (#{username}, #{email})")int insertUser(User user);
}
在上述示例中,我们使用@Select
和@Insert
注解来绑定Mapper XML文件中的SQL操作。这使得您可以通过Java接口来调用这些操作。
步骤 4:配置 MyBatis 数据源
最后,您需要配置MyBatis的数据源和其他相关属性。这通常在Spring Boot的配置文件中完成。
# application.yml
spring:datasource:url: jdbc:mysql://localhost:3306/mydbusername: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Drivermybatis:config-location: classpath:mybatis-config.xml
在上述配置中,我们指定了数据库的连接信息,并通过mybatis.config-location
属性指定了MyBatis的配置文件位置。
使用 MyBatis 映射文件
现在,您可以使用MyBatis映射文件来执行数据库操作了。以下是一个简单的示例:
@RestController
@RequestMapping("/users")
public class UserController {private final UserMapper userMapper;@Autowiredpublic UserController(UserMapper userMapper) {this.userMapper = userMapper;}@GetMapping("/{id}")public User getUser(@PathVariable int id) {return userMapper.getUserById(id);}@PostMapping("/")public String createUser(@RequestBody User user) {int rows = userMapper.insertUser(user);if (rows > 0) {return "User created successfully!";} else {return "User creation failed.";}}
}
在上述代码中,我们创建了一个UserController
,它注入了UserMapper
。通过getUser
方法可以根据用户ID查询用户信息,通过createUser
方法可以插入新用户信息。
运行 MyBatis 映射文件示例
现在,您可以运行应用程序并测试MyBatis映射文件的配置和使用。确保数据库连接信息正确,并通过REST API测试/users/{id}
和/users/
端点。
总结
MyBatis的映射文件(
Mapper XML文件)是配置和管理SQL映射的关键部分。它们允许您将Java对象与数据库表之间的操作进行映射,从而实现了数据的持久化。通过创建Mapper XML文件、配置MyBatis、创建Mapper接口和使用注解,您可以轻松地进行数据库操作。
本文介绍了如何创建和配置MyBatis映射文件,以及如何使用它们执行数据库操作。希望这篇文章对您有所帮助,让您更好地理解MyBatis映射文件的概念和用法。 Happy coding!
相关文章:

MyBatis 映射文件(Mapper XML):配置与使用
MyBatis 映射文件(Mapper XML):配置与使用 MyBatis是一个强大的Java持久化框架,它允许您将SQL查询、插入、更新和删除等操作与Java方法进行映射。这种映射是通过MyBatis的映射文件,通常称为Mapper XML文件来实现的。本…...

基于 SpringBoot 的大学生租房网站
文章目录 1 简介2 技术栈3 需求分析4 系统设计5 系统详细设计5.1系统功能模块5.2管理员模块5.3房主功能模块5.4用户功能模块 源码咨询 1 简介 本大学生租房系统使用简洁的框架结构,专门用于用户浏览首页,房屋信息,房屋评价,公告资…...

BL808学习日志-0-概念理解
一、主核心的介绍 1.三个核心在FREERTOS系统中相互独立,各负责各自的外设和程序;其中M0和LP核心在一个总线上,D0单独在一个总线上,两个总线使用AXI4.0(??)通讯? CPU0(M0)-E907架构,320MHz; CPU1(LP)-E9…...
CISSP学习笔记:业务连续性计划
第三章 业务连续性计划 3.1 业务连续性计划 业务连续性计划(BCP): 对组织各种过程的风险评估,发生风险的情况下为了使风险对组织的影响降至最小而定制的各种计划BCP和DRP首先考虑的人不受伤害,然后再解决IT恢复和还原问题BCP的主要步骤: 项…...
.NET Nuget包推荐安装
文章目录 前言通用WPFWebApiBlazor 前言 我这里的包主要是.NET Core的,.NET Framework可能不支持。 通用 Newtonsoft.Json:最常用的C#和Json对象互转的包。支持匿名对象,但是不支持Enum枚举类型,显示的是Enum的数值,…...

【文献阅读】Pocket2Mol : 基于3D蛋白质口袋的高效分子采样 + CrossDocked数据集说明
Pocket2Mol: Efficient Molecular Sampling Based on 3D Protein Pockets code: GitHub - pengxingang/Pocket2Mol: Pocket2Mol: Efficient Molecular Sampling Based on 3D Protein Pockets 所用数据集 与“A 3D Generative Model for Structure-Based Drug Desi…...

TrustRadius 评论:为什么 Splashtop 优于 LogMeIn
在当今日益数字化的格局中,远程访问和远程支持工具不仅方便而且至关重要。无论对于居家办公人员,还是对于提供远程支持的 IT 专家,能够安全高效地访问远程系统已成为以技术为导向的日常生活的主要内容。 Splashtop 和 LogMeIn 是远程领域的两…...

【动态规划】动态规划经典例题 力扣牛客
文章目录 跳台阶 BM63 简单跳台阶扩展 JZ71 简单打家结舍 LC198 中等打家劫舍2 LC213中等最长连续递增序列 LC674 简单乘积最大子数组LC152 中等最长递增子序列LC300 中等最长重复子数组LC718最长公共子串NC BM66最长公共子序列LC1143 中等完全平方数LC279零钱兑换 LC322 中等单…...

统计模型----决策树
决策树 (1)决策树是一种基本分类与回归方法。它的关键在于如何构建这样一棵树。决策树的建立过程中,使用基尼系数来评估节点的纯度和划分的效果。基尼系数是用来度量一个数据集的不确定性的指标,其数值越小表示数据集的纯度越高。…...
C# List 复制之深浅拷贝
C# List 复制 之深浅拷贝 声明类 public class TestStu{public int Number{get;set; }public string Name{get;set; }}public static async Task<int> Main(string[] args){var stu1 new TestStu(){Number 1,Name "1"};var stu2 new TestStu(){Numbe…...
论<script> 标签可以直接写在 HTML 文件中的哪些位置?(可以将 <script> 标签直接插入到 HTML 文件的任何位置)
可以将 <script> 标签直接插入到 HTML 文件的任何位置,以在相应位置执行 JavaScript 代码。 以下是几个示例: 1.<head> 元素内部:在 <head> 元素内部放置 <script> 标签时,脚本将在页面加载过程中被下载和…...

【MySQL进阶】--- 存储引擎的介绍
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【MySQL学习专栏】🎈 本专栏旨在分享学习MySQL的一点学习心得,欢迎大家在评论区讨论💌 目录 一、什么…...

self-XSS漏洞SRC挖掘
本文由掌控安全学院 - 一朵花花酱 投稿 Markdown是一种轻量级标记语言,创始人为约翰格鲁伯(John Gruber)。它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 XHTML(或者HTML)文档。这种语言吸…...

1859. 将句子排序
目录 一、题目 二、代码 一、题目 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 二、代码 定义了一个vector<vector<string>> v(MAX);采用const string& word : v[k] word 就会依次取得 v[k] 中的每个元素(v[k][0],…...

普通学校,普通背景,普通公司,不普通总结。
作者:阿秀 InterviewGuide大厂面试真题网站:https://top.interviewguide.cn 这是阿秀的第「313」篇原创 小伙伴们大家好,我是阿秀。 可能很多人点开牛客、知乎、B站,一看帖子的标题都是"某985xxxx"、"不入流211xxx…...

Flink之Watermark生成策略
在Flink1.12以后,watermark默认是按固定频率周期性的产生. 在Flink1.12版本以前是有两种生成策略的: AssignerWithPeriodicWatermarks周期性生成watermarkAssignerWithPunctuatedWatermarks[已过时] 按照指定标记性事件生成watermark 新版本API内置的watermark策略 单调递增的…...

提升API文档编写效率,Dash for Mac是你的不二之选
在编写和开发API文档的过程中,你是否经常遇到查找困难、管理混乱、效率低下等问题?这些都是让人头疼的问题,但现在有了Dash for Mac,一切都将变得简单而高效。 Dash for Mac是一款专为API文档编写和管理设计的工具,它…...

无人注意,新安装的 Ubuntu 23.04 不支持安装 32 位应用
导读新安装的 Ubuntu 23.04 不支持安装 32 位应用。 无人注意,新安装的 Ubuntu 23.04 不支持安装 32 位应用 有用户报告,在新安装的 Ubuntu 23.04 上从 Ubuntu 仓库安装的 Steam 客户端是不工作的。在 Ubuntu 23.04 中使用了基于 Flutter 的新安装程序…...

全面横扫:dlib Python API在Linux和Windows的配置方案
前言 在计算机视觉和人工智能领域,dlib是一个备受推崇的工具库。它为开发者提供了强大的图像处理、机器学习和深度学习功能。在计算机视觉项目中,配置dlib Python API是一个重要的初始步骤。本文将引导读者详细了解在Linux和Windows系统上安装和配置dli…...
30种编程语言写国庆节快乐,收藏后改改留着拜年用
文章目录 核心代码版多行代码单行代码 核心代码版 Python:print(“国庆节快乐!!!”)C:printf(“国庆节快乐!!!”);C:cout<<“国庆节快乐!!…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...