MyBatis Mapper映射器的具体用法

 更新时间:2023年10月07日 10:45:09   作者:小日子呀  
映射器是MyBatis中最重要的文件,映射器由Java接口和XML文件共同组成,具有一定的参考价值,感兴趣的可以了解一下

映射器是 MyBatis 中最重要的文件,文件中包含一组 SQL 语句(例如查询、添加、删除、修改),这些语句称为映射语句或映射 SQL 语句。

映射器由 Java 接口和 XML 文件(或注解)共同组成,它的作用如下。

  • 定义参数类型
  • 配置缓存
  • 提供 SQL 语句和动态 SQL
  • 定义查询结果和 POJO 的映射关系

映射器有以下两种实现方式。

  • 通过 XML 文件方式实现,比如我们在 mybatis-config.xml 文件中描述的 XML 文件,用来生成 mapper。
  • 通过注解的方式实现,使用 Configuration 对象注册 Mapper 接口。

如果 SQL 语句存在动态 SQL 或者比较复杂,使用注解写在 Java 文件里可读性差,且增加了维护的成本。所以一般建议使用 XML 文件配置的方式,避免重复编写 SQL 语句。

XML实现映射器

XML 定义映射器分为两个部分:接口和XML。下面先定义接口 WebsiteMapper

public interface WebsiteMapper {
    public List<Website> selectAllWebsite();
}

WebsiteMapper.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="net.cc.mapper.WebsiteMapper">
    <!-- 查询所有网站信息 -->
    <select id="selectAllWebsite"
        resultType="net.cc.po.Website">
        select * from website
    </select>
</mapper>

下面对上述 XML 文件进行讲解。

  • namespace 用来定义命名空间,该命名空间和定义接口的全限定名一致。
  • <select> 元素表明这是一条查询语句,属性 id 用来标识这条 SQL。resultType 表示返回的是一个 Website 类型的值。

在 MyBatis 配置文件中添加以下代码。

<mapper resource="net/cc/mapper/WebsiteMapper.xml" />

该语句用来引入 XML 文件,MyBatis 会读取 WebsiteMapper.xml 文件,生成映射器。

注解实现映射器

使用注解的方式实现映射器,只需要在接口中使用 Java 注解,注入 SQL 即可。如下所示。

public interface WebsiteMapper2 {
    @Select(value = "select * from website")
    public List<Website> selectAllWebsite();
}

 这里我们使用了 @Select 注解,并且注入了和 XML 中相同的 select 语句。

如果使用注解和 XML 文件两种方式同时定义,那么 XML 方式将覆盖掉注解方式。

虽然这里注解的方式看起来比 XML 简单,但是现实中我们遇到的 SQL 会比该例子复杂得多。如果 SQL 语句中有多个表的关联、多个查询条件、级联、条件分支等,显然这条 SQL 就会复杂的多,所以并不建议读者使用这种方式,此外,XML 可以相互引入,而注解是不可以的,所以在一些比较复杂的场景下,使用 XML 方式会更加灵活和方便。因此大部分的企业都以 XML 为主,本教程也会保持一致,以 XML 方式来创建映射器。当然在一些简单的表和应用中使用注解方式也会比较简单。

MyBatis 映射器的主要元素

下面介绍在映射器中可以定义哪些元素,以及它们的作用。

元素名称描述备注
mapper映射文件的根节点,只有 namescape 一个属性namescape 作用如下:
  • 用于区分不同的 mapper,全局唯一
  • 绑定DAO接口,即面向接口编程。当 namescape 绑定某一接口后,可以不用写该接口的实现类,MyBatis 会通过接口的完整限定名查找到对应的 mapper 配置来执行 SQL 语句。因此 namescape 的命名必须要跟接口同名。
select查询语句,最常用、最复杂的元素之一可以自定义参数,返回结果集等
insert插入语句执行后返回一个整数,代表插入的条数
update更新语句执行后返回一个整数,代表更新的条数
delete删除语句执行后返回一个整数,代表删除的条数
parameterMap定义参数映射关系即将被删除的元素,不建议使用
sql允许定义一部分的 SQL,然后在各个地方引用它例如,一张表列名,我们可以一次定义,在多个 SQL 语句中使用
resultMap用来描述数据库结果集与对象的对应关系,它是最复杂、最强大的元素提供映射规则
cache配置给定命名空间的缓存-
cache-ref其它命名空间缓存配置的引用-

关于 MyBatis 的 SQL 映射文件中的 mapper 元素的 namescape 属性有如下要求。

  • namescape 的命名必须跟某个 DAO 接口同名,同属于 DAO 层,因此代码结构上,映射文件与该接口应放置在同一 package 下(如 net.biancheng.dao.website),并且习惯上是以 Mapper 结尾(如 WebsiteMapper.java、WebsiteMapper.xml)。
  • 不同的 mapper 文件中子元素的 id 可以相同,MyBatis 通过 namescape 和子元素的 id 联合区分。接口中的方法与映射文件中的 SQL 语句 id 应一 一对应。

到此这篇关于MyBatis Mapper映射器的具体用法的文章就介绍到这了,更多相关MyBatis Mapper映射器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • java多线程的同步方法实例代码

    java多线程的同步方法实例代码

    这篇文章主要介绍了 java多线程的同步方法实例代码的相关资料,需要的朋友可以参考下
    2017-04-04
  • Spring深入分析讲解BeanUtils的实现

    Spring深入分析讲解BeanUtils的实现

    java知识体系统有很多数据实体,比较常用的DTO、BO、DO、VO等,其他类似POJO概念太老了现在基本废弃掉了,本篇幅直接忽略,对于这几种数据实体各自代表的含义和应用场景先做一下简单描述和分析
    2022-06-06
  • SpringBoot整合Mybatis-Plus实现微信注册登录的示例代码

    SpringBoot整合Mybatis-Plus实现微信注册登录的示例代码

    微信是不可或缺的通讯工具,本文主要介绍了SpringBoot整合Mybatis-Plus实现微信注册登录的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 基于jdbc处理Clob的使用介绍

    基于jdbc处理Clob的使用介绍

    本篇文章是对jdbc处理Clob的使用进行了分析介绍,需要的朋友参考下
    2013-05-05
  • Java使用dom4j解析xml、读取xml文件图文教程

    Java使用dom4j解析xml、读取xml文件图文教程

    这篇文章主要给大家介绍了关于Java使用dom4j解析xml、读取xml文件的相关资料,包括创建SAXReader对象、读取并解析XML文件、获取Document对象、获取根元素和子元素、获取属性和内容等操作,还提供了配置Dom4j jar包的步骤,需要的朋友可以参考下
    2025-02-02
  • SpringBoot实现网站的登陆注册逻辑记录

    SpringBoot实现网站的登陆注册逻辑记录

    登陆注册功能是我们日常开发中经常遇到的一个功能,下面这篇文章主要给大家介绍了关于SpringBoot实现网站的登陆注册逻辑的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • Java如何自定义异常打印非堆栈信息详解

    Java如何自定义异常打印非堆栈信息详解

    这篇文章主要给大家介绍了关于Java如何自定义异常打印非堆栈信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2018-04-04
  • Java IO文件过滤器对命令设计模式的使用

    Java IO文件过滤器对命令设计模式的使用

    java io流里面使用到了很多的设计模式,最典型的就是装饰模式,还有命令模式,下面分两部分来讲Java IO文件过滤器对命令设计模式的使用,一起看看吧
    2017-06-06
  • java面向对象编程类的内聚性分析

    java面向对象编程类的内聚性分析

    高内聚、低耦合是软件设计中非常关键的概念。在面向对象程序设计中类的划分时,类的内聚性越高,其封装性越好,越容易复用
    2021-10-10
  • 自己手写Mybatis通用batchInsert问题

    自己手写Mybatis通用batchInsert问题

    这篇文章主要介绍了自己手写Mybatis通用batchInsert问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论