11.02Mybatis Mapper映射器

11.02Mybatis Mapper映射器

Mapper映射器包含的内容

内容:

  • 一组SQL语句

映射器的组成部分以及实现方式

映射器的组成部分:

Java 接口XML 文件(或注解)共同组成--->作用:

  • 定义参数类型

  • 配置缓存

  • 提供SQL语句和动态SQL

  • 定义查询结果和PoJo的映射关系

映射器的实现方式:

  • xml文件方式实现,

  • 注解方式实现,使用Configuration对象注册Mapper接口

xml实现映射器

  1. 接口

  2. xml

  3. 测试类

接口:

package com.junkingboy.mapper;

import com.junkingboy.bean.Website;

import java.util.List;

/**
* @description:mybatis框架测试接口,该接口定义了.xml文件操作的表用到的方法
* @data: 2021/11/2 16:35
* @author: Lucifer
*/
public interface WebsiteMapper {
   public List<Website> selectAllWebsite();
}

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.junkingboy.mapper.WebsiteMapper">
   <!--查询所有网站的信息-->
   <select id="selectAllWebsite" resultType="com.junkingboy.bean.Website">
      select * from javawebtest.website;
   </select>
</mapper>
<!--
namespace 用来定义命名空间,该命名空间和定义接口的全限定名一致。
<select> 元素表明这是一条查询语句,属性 id 用来标识这条 SQL。
resultType 表示返回的是一个 Website 类型的值。
-->

同时在mybatis配置文件中需要引用这个.xml文件:

    <!--将mapper文件加入到配置文件中-->
   <mappers>
       <mapper resource="src/main/java/com/junkingboy/mapper/WebsiteMapper.xml" />
   </mappers>
   <!--
   引入 XML 文件,MyBatis 会读取 WebsiteMapper.xml 文件,生成映射器。
   -->

测试类:

    @Test
   public void testGetInformationByInterface() {
       /*
       IO流读取配置文件
       使用SqlSessionFactory接口实现类加载配置文件
       使用SqlSession接口开启连接
       获取WebsiteMapper接口定义的方法
       执行接口当中的方法
        */
       InputStream is = null;
       try {
           is = Resources.getResourceAsStream("xml/mybatis-config.xml");
      }catch (Exception e) {
           e.printStackTrace();
      }

       /*获取配置文件*/
       SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
       /*开启连接*/
       SqlSession ss = ssf.openSession();
       /*获取WebMapper下的方法返回给接口*/
       WebsiteMapper wm = ss.getMapper(WebsiteMapper.class);

       /*使用List作为处理集处理WebsiteMapper下的方法*/
       List<Website> websiteList = wm.selectAllWebsite();
       /*循环遍历结果打印*/
       for (Website site :
               websiteList) {
           System.out.println(site);
      }

       /*关闭资源*/
       ss.commit();
       ss.close();
  }

注解实现映射器

由于注解得映射器遇到链表的语句十分不便,所以不做过多分析。

示例:

package com.junkingboy.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.junkingboy.mapper.Website;
public interface WebsiteMapper2 {
   @Select(value = "select * from website")
   public List<Website> selectAllWebsite();
}

Mybatis映射器中可以编辑的元素

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

Mybatisnamespace属性的要求:

  • namescape 的命名必须跟某个 DAO 接口同名,同属于 DAO 层,因此代码结构上,映射文件与该接口应放置在同一 package 下(如 com.junkingboy.website),并且习惯上是以 Mapper 结尾(如 WebsiteMapper.java、WebsiteMapper.xml)

  • 不同的 mapper 文件中子元素的 id 可以相同,MyBatis 通过 namescape 和子元素的 id 联合区分。接口中的方法与映射文件中的 SQL 语句 id 应一 一对应。

It's a lonely road!!!
原文地址:https://www.cnblogs.com/JunkingBoy/p/15514859.html