Mybatis Mapper

本文详细介绍了MyBatis中的Mapper映射器,包括其在项目中的作用、XML实现方式、接口与XML的配合、主要元素如select、insert等及其属性。重点讲述了如何通过接口和XML定义SQL语句,以及如何利用namespace和ID进行SQL操作的引用。
摘要由CSDN通过智能技术生成

Mybatis Mapper

一、概述

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

二、作用

一个完整的映射器由Java 接口XML 文件(或注解)共同组成,它的作用包括:

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

三、XML 实现映射器

XML 定义映射器分为两个部分:接口和XML

首先,定义一个映射器接口 WebsiteMapper:

package com.apesource.mapper;

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

然后,定义一个XML映射文件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="com.apesource.mapper.WebsiteMapper">

    <!-- 查询所有网站信息 -->
    <select id="selectAllWebsite"
        resultType="com.apesource.entity.Website">
        select * from website
    </select>

</mapper>

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

  • namespace用来定义命名空间,该命名空间和定义接口的全限定名一致。
  • select 元素表明这是一条查询语句,id属性 用来标识这条 SQL的映射名称。resultType 属性表示使用 Website 类型的对查询结果进行封装。

最后,在 MyBatis 配置文件mybatis-config.xml中添加映射文件的引用

public class Test {
    public static void main(String[] args) throws IOException {
        InputStream config = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
        SqlSession ss = ssf.openSession();
        
        WebsiteMapper websiteMapper = ss.getMapper(WebsiteMapper.class);
        List<Website> websitelist = websiteMapper.selectAllWebsite();
        for (Website site : websitelist) {
            System.out.println(site);
        }
        ss.commit();
        ss.close();
    }
}
  • 使用接口的原因,是为了让更方便的调用到配置文件中的SQL操作
  • 由于接口不能实例化对象,所以使用反射,以及动态代理的方法创建一个接口的代理对象
  • 这个代理对象便可以调用接口中的方法,从而调用到配置文件中的SQL操作
  • 接口中的方法名必须和配置文件中各个SQL操作的ID相同
  • 接口和配置文件必须在同一个包,是为了使用接口的包路径+接口名和使用**mapper中namespace+SQL ID **都能定位到指定的SQL操作达到相同的目的,从而优化了后者使用字符串定位的方法

使用接口

// 通过映射器接口创建映射器代理对象
EarthquakeMapper earthquakeMapper = sqlSession.getMapper(EarthquakeMapper.class);
Earthquake earthquakesTest02=earthquakeMapper.selectEarthquakeById(65);
System.out.println(earthquakesTest02);

使用namespace+SQL ID

// 执行添加映射操作
ss.insert("com.apesource.mapper.WebsiteMapper.insertWebsite", website);
// 执行查询映射操作
List<Website> listWeb = ss.selectList("com.apesource.mapper.WebsiteMapper.selectAllWebsite");
for (Website site : listWeb) {
     System.out.println(site.toString());
}

四、MyBatis 映射器的主要元素

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

五、select 标签常用属性

属性名称描 述备注
id它和 Mapper 的命名空间组合起来使用,是唯一标识符,供 MyBatis 调用如果命名空间+id不唯一,那么 MyBatis 会抛出异常
parameterType表示传入 SQL 语句传入参数类型的全限定名或别名。它是一个可选属性,MyBatis 能推断出具体传入语句的参数支持基本数据类型和 JavaBean、Map 等复杂数据类型
resultTypeSQL 语句执行后返回的类型(全限定名或者别名)。如果是集合类型,返回的是集合元素的类型,返回时可以使用 resultType 或 resultMap 之一-
resultMap它是映射集的引用,与 元素一起使用,返回时可以使用 resultType 或 resultMap 之一是 MyBatis 最复杂的元素,可以配置映射规则、级联、typeHandler 等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kⅈꫛᧁ269

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值