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

相关推荐
B1118521Y461 天前
flask的使用
后端·python·flask
only-qi1 天前
146. LRU 缓存
java·算法·缓存
阿里小阿希1 天前
Vue3 + Element Plus 项目中日期时间处理的最佳实践与数据库设计规范
数据库·设计规范
xuxie131 天前
SpringBoot文件下载(多文件以zip形式,单文件格式不变)
java·spring boot·后端
白鹭1 天前
MySQL源码部署(rhel7)
数据库·mysql
重生成为编程大王1 天前
Java中的多态有什么用?
java·后端
666和7771 天前
Struts2 工作总结
java·数据库
还听珊瑚海吗1 天前
SpringMVC(一)
数据库
中草药z1 天前
【Stream API】高效简化集合处理
java·前端·javascript·stream·parallelstream·并行流
野犬寒鸦1 天前
力扣hot100:搜索二维矩阵 II(常见误区与高效解法详解)(240)
java·数据结构·算法·leetcode·面试