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映射文件进行操作。

相关推荐
凯子坚持 c28 分钟前
Docker 容器实战:从镜像管理到私有仓库构建深度解析
java·docker·eureka
倔强的石头10629 分钟前
openGauss数据库:从CentOS 7.9部署到实战验证
linux·数据库·centos
q***01652 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
x***13392 小时前
【MyBatisPlus】MyBatisPlus介绍与使用
android·前端·后端
4***14902 小时前
MySQL调试技巧与工具
数据库·mysql
Arva .2 小时前
如何监控并优化慢 SQL?
数据库·sql
f***68603 小时前
【SpringBoot篇】详解Bean的管理(获取bean,bean的作用域,第三方bean)
java·spring boot·后端
z***75154 小时前
【Springboot3+vue3】从零到一搭建Springboot3+vue3前后端分离项目之后端环境搭建
android·前端·后端
likuolei4 小时前
Eclipse 快捷键
java·ide·eclipse