MyBatis——XML映射文件

ops/2025/1/16 20:47:36/

在MyBatis中,既可以通过注解的方式配置SQL语句,也可以通过XML映射文件的方式配置SQL语句。对于简单的SQL语句建议直接通过注解的方式配置SQL语句:

java">@Delete("delete from user where id=#{id}")
Integer deleteById(Integer id);

但是当实现需求需要复杂的SQL语句时,使用注解往往无法很好的完成需求。此时就需要使用XML映射文件配置SQL语句。

XML映射文件默认规则

有了XML映射文件之后,定义Mapper接口方法的时候就不需要在方法上使用注解了(一个Mapper接口的方法不能对应两条SQL语句)。以下是XML映射文件的定义规则:

0.XML映射文件中首先需要引入头信息(约束),约束信息可以直接在Mybatis官方文档中拷贝:

    <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="your mapper"><mapper>

1.XML映射文件的名称必须和对应的Mapper接口完全、严格一致,并且XML映射文件必须和Mapper接口放置在相同的包下 (必须同包同名)。

如图所示,UserMapper这个Mapper接口和UserMapper.xml映射文件名称完全一样,并且存放的包的结构也完全一样

2.XML映射文件中的namespace属性必须和对应的Mapper接口的全限定名完全一致,这样才能正确的进行映射。

如图所示,映射文件中的namespace属性和对应的Mapper接口全限定名一致。

3.XML映射文件中的SQL语句的id必须和Mapper接口中的方法名完全一致,返回类型也必须完全一致

如图所示,该映射文件的id是selectAll,代表着这个SQL语句是对应selectAll这个方法;返回的类型也是User,但是由于selectAll方法的返回值是一个List,所以说MyBatis会自动将所有查询结果封装为User对象,然后再封装为一个List<User>集合返回给方法

(注意,这里方法名下的红色波浪线不是报错,只是一个警告,因为这个项目是学习项目,里面有很多模块,模块中有很多同名的包和同名的类,idea在扫描的时候发现了这个问题,报了警告,实际上运行是没问题的。)

使用XML映射文件实现查询全部用户

由于我们使用的是通过XML映射文件的方式配置SQL,所以说在mapper接口中的代码十分简单:

java">    public List<User> selectAll();

XML映射文件中的代码就相对更加复杂

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wzb.mapper.UserMapper"><select id="selectAll" resultType="com.wzb.pojo.User">select * from user</select>
</mapper>

根据XML映射文件中定义的SQL语句可知,该SQL语句会查询user表中的每一个用户,然后将用户的所有字段根据User对象中的属性封装成User实体对象返回;当查询出多条用户记录时,MyBatis框架自动将这些一个个创建好的User实体对象封装成一个List集合。所以说Mapper接口中的方法直接返回List集合即可。

测试XML映射文件定义SQL语句是否成功:

java">    @Testpublic void testSelectAll() {List<User> userList = userMapper.selectAll();for (User user : userList) {System.out.println(user);}}

 

如图所示,成功通过XML映射文件定义SQL语句完成了对用户的查询,但是对于这样的简单SQL语句,个人并不推荐使用XML映射文件,而是直接使用注解的方式即可;但是对于动态SQL这样复杂的SQL语句,就只能使用XML映射文件进行操作。

 

 


http://www.ppmy.cn/ops/150635.html

相关文章

40,【6】CTFHUB WEB SQL MYSQL数据库

进入靶场 12时回显异常&#xff0c;可知是整数型注入 order by判断字节数 使用order by 判断出字节数为3 使用union select 寻找回显点 database爆出了库名 表名有2个&#xff0c;news和qctclblljo,看不出来flag在哪个文件里&#xff0c;都看看 第2个更可疑一点&#xff0c;&a…

《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(28):DSA数字签名

《深入浅出HTTPS​​​​​​​​​​》读书笔记&#xff08;28&#xff09;&#xff1a;DSA数字签名 对称加密算法有很多算法&#xff0c;标准算法是RSA机密算法&#xff0c;数字签名技术也有一个标准DSS&#xff08;Digital Signature Standard&#xff09;&#xff0c;其标准…

npm更换淘宝镜像源

新的淘宝npm镜像源地址&#xff1a;https://registry.npmmirror.com npm更换淘宝镜像源 npm config set registry https://registry.npmmirror.com 然后再执行以下操作查看是否成功 npm config get registry 如果没安装过淘宝镜像源的&#xff0c;则直接安装 npm install -…

《零基础Go语言算法实战》【题目 4-7】实现链表的排序

《零基础Go语言算法实战》 【题目 4-7】实现链表的排序 请用 Go 语言实现合并 K 个排序的链表并将其作为一个排序链表返回。 【解答】 ① 思路。 借助分治算法的思想&#xff0c;递归对比两个链表中的每个元素的值的大小&#xff0c;然后将 K 个有序链 表两两合并即可。 …

【数字化】华为-用变革的方法确保规划落地

导读&#xff1a;华为在数字化转型过程中&#xff0c;深刻认识到变革的必要性&#xff0c;并采用了一系列有效的方法确保转型规划的有效落地。华为认为&#xff0c;数字化转型不仅仅是技术层面的革新&#xff0c;更是企业运作模式、流程、组织、文化等深层次的变革。数字化转型…

AWS云计算概览(自用留存)

目录 一、云概念概览 &#xff08;1&#xff09;云服务模型 &#xff08;2&#xff09;云计算6大优势 &#xff08;3&#xff09;web服务 &#xff08;4&#xff09;AWS云采用框架&#xff08;AWS CAF&#xff09; 二、云经济学 & 账单 &#xff08;1&#xff09;定…

【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍训练网络的时候如何判断过拟合和欠拟合?

【大厂面试AI算法题中的知识点】方向涉及&#xff1a;ML/DL/CV/NLP/大数据…本篇介绍训练网络的时候如何判断过拟合和欠拟合&#xff1f; 【大厂面试AI算法题中的知识点】方向涉及&#xff1a;ML/DL/CV/NLP/大数据…本篇介绍训练网络的时候如何判断过拟合和欠拟合&#xff1f;…

完整地实现了推荐系统的构建、实验和评估过程,为不同推荐算法在同一数据集上的性能比较提供了可重复实验的框架

{"cells": [{"cell_type": "markdown","metadata": {},"source": ["# 基于用户的协同过滤算法"]},{"cell_type": "code","execution_count": 1,"metadata": {},"ou…