MyBatis——XML映射文件

devtools/2025/1/18 2:29:56/

在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/devtools/151435.html

相关文章

RabbitMQ中有哪几种交换机类型?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ中有哪几种交换机类型&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ中有哪几种交换机类型&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;交换机&#xf…

【人工智能】大语言模型的微调:让模型更贴近你的业务需求

大语言模型的微调&#xff1a;让模型更贴近你的业务需求 随着大语言模型&#xff08;LLM, Large Language Model&#xff09;如 GPT-4、BERT 和 T5 等的广泛应用&#xff0c;模型的微调&#xff08;Fine-tuning&#xff09;技术成为实现领域专属任务的重要手段。通过微调&…

salesforce在opportunity的opportunity products页面增加一个按钮,可以批量删除products

在 Salesforce 中&#xff0c;如果想在「Opportunity > Opportunity Products」列表页面上增加一个“批量删除产品”的按钮&#xff0c;并实现勾选多条产品后统一删除&#xff0c;大体可以考虑以下几种实现思路。由于环境和版本&#xff08;Classic / Lightning&#xff09;…

第三章:HTML的字符实体,meta标签以及全局属性

目录 一、字符实体 二、meta元信息 三、全局属性 四、总结 一、字符实体 在 HTML 中&#xff0c;某些字符是预留的&#xff0c;不能直接使用。例如&#xff0c;小于号&#xff08;<&#xff09;和大于号&#xff08;>&#xff09;会被浏览器误认为是标签&#xff0c…

数据库(MySQL)练习

数据库&#xff08;MySQL&#xff09;练习 一、练习1.15练习1.16练习 二、注意事项2.1 第四天 一、练习 1.15练习 win11安装配置MySQL超详细教程: https://baijiahao.baidu.com/s?id1786910666566008458&wfrspider&forpc 准备工作&#xff1a; mysql -uroot -p #以…

Android 播放SMB共享视频

表面上看MediaPlayer只能播放本地和http协议视频。没有直接支持smb://协议。那还能播放smb视频呢&#xff1f;也可以的&#xff01; MediaPlayer有一个方法叫&#xff1a;setDataSource(MediaDataSource)。 /*** Sets the data source (MediaDataSource) to use.** param data…

Vue3 Element-Plus el-tree 右键菜单组件

参考代码&#xff1a;实现Vue3Element-Plus(tree、table)右键菜单组件 这篇文章的代码确实能用&#xff0c;但是存在错误&#xff0c;修正后的代码&#xff1a; <template><div style"text-align: right"><el-icon size"12" color"#…

网络学习记录5

二、学习网络知识&#xff1a; 1、透传&#xff1a; ①“透传”指的是数据在传输过程中不被交换机或其他网络设备解析、修改或处理&#xff0c;而是直接从一个端口传输到另一个端口。这种传输方式保持了数据的原始性和完整性&#xff0c;常用于需要高速、低延迟的数据传输场景…