MyBatis XML映射文件编写【后端 18】

MyBatis XML映射文件编写

请添加图片描述

MyBatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs (Plain Old Java Objects, 普通的 Java 对象)映射成数据库中的记录。

在 MyBatis 中,XML 映射文件是非常关键的部分,它定义了如何将 Java 对象映射到 SQL 语句以及如何将 SQL 查询结果映射回 Java 对象。下面,我们将详细介绍如何编写 MyBatis 的 XML 映射文件。

1. XML 映射文件的基本结构

每个 MyBatis 的映射文件都包含了一个 <mapper> 元素作为根元素。在 <mapper> 元素内部,你可以定义多种映射语句,如 <select><insert><update><delete>

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="com.example.mapper.UserMapper">  <!-- SQL 映射语句将在这里定义 -->  </mapper>
  • namespace:命名空间,它是绑定 MyBatis 接口的全路径名,用于唯一标识 mapper。
2. SQL 映射语句
2.1 <select>

用于查询操作。你可以使用 #{} 来进行参数替换,防止 SQL 注入。

<select id="selectUserById" parameterType="int" resultType="com.example.domain.User">  SELECT * FROM users WHERE id = #{id}  
</select>
  • id:唯一标识符,与 Mapper 接口中的方法名对应。
  • parameterType:输入参数的类型。
  • resultType:SQL 查询返回的结果类型,即 Java 对象的全路径名。
2.2 <insert><update><delete>

这些标签分别用于插入、更新和删除操作。对于修改数据库的操作,MyBatis 支持使用 <selectKey> 来获取自动生成的主键。

<insert id="insertUser" parameterType="com.example.domain.User">  <selectKey keyProperty="id" resultType="int" order="AFTER">  SELECT LAST_INSERT_ID()  </selectKey>  INSERT INTO users (name, email) VALUES (#{name}, #{email})  
</insert>
  • keyProperty:指定 Java 对象的哪个属性用于接收生成的主键值。
  • order:指定 <selectKey> 相对于插入语句的执行顺序,BEFOREAFTER
3. 映射复杂结果

对于复杂的查询,你可能需要将结果映射到多个 Java 对象或者映射到 Java 对象的集合中。MyBatis 提供了 <resultMap> 元素来支持复杂的映射。

<resultMap id="userResultMap" type="com.example.domain.User">  <id property="id" column="user_id" />  <result property="username" column="user_name" />  <result property="email" column="email_address" />  <!-- 更多映射 -->  
</resultMap>  <select id="selectUsers" resultMap="userResultMap">  SELECT user_id, user_name, email_address FROM users  
</select>
  • :用于映射主键字段。
  • :用于映射非主键字段。
4. 注意事项
  • 确保 XML 文件的命名空间和路径与 Mapper 接口的全路径名一致。
  • <mapper> 标签内,避免使用 MyBatis 保留的关键字。
  • 仔细检查 SQL 语句中的参数替换,确保没有 SQL 注入的风险。
  • 使用 <resultMap> 可以更灵活地控制复杂对象的映射关系。

通过上面的介绍,你应该对 MyBatis 的 XML 映射文件编写有了基本的了解。在实际开发中,根据具体需求编写相应的 SQL 映射语句,将大大提高数据访问层的开发效率和灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143031.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

红帽7—Mysql的源码编译

到官网选择源码进行安装 使用wget命令下载链接 下载安装后对文件包进行解压 [rootnginx ~]# tar zxf mysql-boost-5.7.44.tar.gz 安装cmake编译工具 [rootnginx ~]# yum install cmake 使用源码编译安装mysql [rootmysql-node10 mysql-5.7.44]# cmake \ -DCMAKE_INSTALL_PRE…

6个Python小游戏项目源码【免费】

6个Python小游戏项目源码 源码下载地址&#xff1a; 6个Python小游戏项目源码 提取码: bfh3

Stable diffusion 学习过程

diffusion model 讲解&#xff1a; 【较真系列】讲人话-Diffusion Model全解(原理代码公式)_哔哩哔哩_bilibili stable diffusion【CVPR2022】 原始论文&#xff1a; https://arxiv.org/pdf/2112.10752 讲解&#xff1a;【论文简介】Stable Diffusion的基础论文:2112.High…

JZ2440开发板——S3C2440的UART的使用

以下内容源于韦东山课程的学习与整理&#xff0c;如有侵权请告知删除。 一、UART硬件简介 UART&#xff0c;全称是“Universal Asynchronous Receiver Transmitter”&#xff0c;即“通用异步收发器”&#xff0c;也就是我们日常说的“串口”。 它在嵌入式中用途非常广泛&…

牛客周赛 Round 60(下)

构造序列 题目描述 登录—专业IT笔试面试备考平台_牛客网 运行代码 #include <iostream> #include<stdio.h> #include<math.h> using namespace std; int main() {int n, m;cin >> n >> m;int minVal min(n, m);int maxVal max(n, m);cout …

右值生命周期的延长

第一个例子&#xff1a; output&#xff1a; result&#xff08;&#xff09;创建了一个临时对象&#xff0c;它是一个右值&#xff0c;通过结果我们可以看到直到main函数结束时这个对象才调用了析构函数&#xff1b; result&#xff08;&#xff09;返回右值&#xff0c;我…

面向对象分析与设计-系统架构师(六十七)

1网络设计过程包括逻辑网络设计和物理网络设计两个阶段&#xff0c;下面的选项中&#xff0c;&#xff08;&#xff09;应该属于逻辑网络设计阶段的任务。 A选择路由协议 B设备选型 C结构化布线 D机房设计 解析&#xff1a; 物理网络设计的内容包括&#xff1a;设备选型、…

pdf去水印怎么去掉免费?6个pdf去除水印的方法快码住,超级好用!

pdf去水印怎么去掉免费&#xff1f;您是否有一些带有水印的pdf文档&#xff0c;让您感觉到头疼&#xff1f;您又是否希望能够去除这些水印&#xff0c;或者想用其他水印来替换现有的水印&#xff1f;如果是这样的话&#xff0c;我非常推荐您继续阅读本篇文章。本文将为您提供一…

Gateway网关的实现

API网关 网关路由必须支持负载均衡&#xff0c;服务列表是从注册中心拉取的客户端发出请求的URL指向的是网关&#xff0c;URL还必须要包含目标信息网关收到URL&#xff0c;通过一定的规则&#xff0c;要能识别出交给哪个实例去处理网关有能力对请求响应进行修改 引入依赖包 …

使用LangGPT提示词让大模型比较浮点数

使用LangGPT提示词让大模型比较浮点数 背景介绍环境准备创建虚拟环境安装一些必要的库安装其他依赖部署大模型启动图形交互服务设置提示词与测试 LangGPT结构化提示词 背景介绍 LLM在对比浮点数字时表现不佳&#xff0c;经验证&#xff0c;internlm2-chat-1.8b (internlm2-cha…

计算机视觉—3d点云数据基础

点云数据 3d点云数据由来 3d点云 3D Point Cloud是一种用于表示三维空间中对象或场景的数据结构。在最基础的形式中&#xff0c;它是一个包含多个三维坐标点&#xff08;X, Y, Z&#xff09;的集合。这些点是通过对实际物体或场景表面进行离散采样而获得的&#xff0c;因此&a…

代码随想录:动态规划4-5

42.接雨水 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,…

python正则表达式如何不区分大小写

使用python的re模块做模式匹配时&#xff0c;有时需要忽略大小写&#xff0c;只需要在re.search()函数中添加参数re.IGNORECASE即可。 mystring some string pattern some pattern match re.search(pattern, mystring, re.IGNORECASE)

【Linux】理解和解释shell命令的工具

&#x1f41a;作者简介&#xff1a;花神庙码农&#xff08;专注于Linux、WLAN、TCP/IP、Python等技术方向&#xff09;&#x1f433;博客主页&#xff1a;花神庙码农 &#xff0c;地址&#xff1a;https://blog.csdn.net/qxhgd&#x1f310;系列专栏&#xff1a;C语言编程&…

2025年最新大数据毕业设计选题-Hadoop综合项目

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向&#xff0c;比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向&#xff0c;比如民宿分析、电商行为分析、天气分析等等。。。…

必备工具,AI生成证件照,再也不用麻烦他人,电子驾驶证等多种证件照一键生成

最近有一个生成证件照的开源项目很火&#xff0c;今天我们来学习一下。之前我生成证件照都是线下去拍照&#xff0c;线上使用也是各种限制&#xff0c;需要付费或看广告&#xff0c;而且效果也不是很理想&#xff0c; 今天要分享的这个 AI 证件照生成工具可以一键可以生成一寸…

深度学习之图像数据集增强(Data Augmentation)

文章目录 一、 数据增强概述二、python实现传统数据增强参考文献 一、 数据增强概述 数据增强&#xff08;Data Augmentation&#xff09;是一种技术&#xff0c;通过对现有数据进行各种变换和处理来生成新的训练样本&#xff0c;从而增加数据集的多样性和数量。这些变换可以是…

一文入门生成式AI(理解ChatGPT的原理)

一、什么是生成式AI&#xff1f; 以ChatGPT为代表的生成式AI&#xff0c;是对已有的数据和知识进行向量化的归纳&#xff0c;总结出数据的联合概率。从而在生成内容时&#xff0c;根据用户需求&#xff0c;结合关联字词的概率&#xff0c;生成新的内容。 可以这么联想&#x…

C++对象拷贝时的优化编译

在现代编译器中&#xff0c;当我们在 C中进行对象的拷贝操作时&#xff0c;编译器并非只是机械地执行逐字节的复制。相反&#xff0c;它会进行优化&#xff0c;避免不必要的拷贝构造等等&#xff0c;这种优化包括“返回值优化”&#xff08;RVO&#xff09;&#xff0c;“拷贝省…

电脑的主板,内存条插多少合适?

首先&#xff0c;不是插满4条内存就是最好的。 内存条插得多&#xff0c;确实可以扩充容量&#xff0c;提升性能。但是有些低端的主板配低端CPU&#xff0c;插满4条内存&#xff0c;稳定性下降。这里的稳定性包括供电&#xff0c;单独的内存供电容量等。此时CPU会通过降低内存…