MyBatis——XML映射文件

在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 复制代码
    <?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="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 复制代码
<?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.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 复制代码
    @Test
    public void testSelectAll() {
        List<User> userList = userMapper.selectAll();
        for (User user : userList) {
            System.out.println(user);
        }
    }

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

相关推荐
shengjk13 分钟前
序列化和反序列化:从理论到实践的全方位指南
java·大数据·开发语言·人工智能·后端·ai编程
AI大模型顾潇3 分钟前
[特殊字符] 本地大模型编程实战(29):用大语言模型LLM查询图数据库NEO4J(2)
前端·数据库·人工智能·语言模型·自然语言处理·prompt·neo4j
有时间要学习4 分钟前
MySQL——数据类型&&表的约束
数据库·mysql
jimsten5 分钟前
苍穹外卖 - Day02 学习笔记
java·笔记·学习
工业互联网专业5 分钟前
基于springboot+vue的医院门诊管理系统
java·vue.js·spring boot·毕业设计·源码·课程设计·医院门诊管理系统
wgc2k8 分钟前
Java游戏服务器开发流水账(5)Spring 在游戏开发中的使用简介
java·服务器·游戏
API小爬虫13 分钟前
如何用Jsoup库提取商品名称和价格?
java·爬虫
AI改变未来19 分钟前
数据库常见故障排查
数据库
bing_15827 分钟前
MongoDB 的核心概念(文档、集合、数据库、BSON)是什么?
数据库·mongodb·oracle
Black_Cat_yyds32 分钟前
rabbitmq
java·rabbitmq·java-rabbitmq