MyBatis Mapper如何实现一个映射器呢?

Java-框架王 MyBatis 发布时间:2021-07-19 14:36:50 阅读数:18037 1

映射器简介说明:

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

映射器作用

使用Java 接口并结合XML 文件(或注解)共同组成,它的作用如下
  1. 定义参数类型
  2. 配置缓存
  3. 提供 SQL 语句和动态 SQL
  4. 定义查询结果和 POJO 的映射关系

映射器实现方式

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

当 SQL 语句存在动态 SQL 或优点复杂,
 使用注解将一些信息写入到Java 文件中,则使代码可读性变差,并且维护成本高
所以笔者建议大家尽量使用XML 文件配置的方式实现映射文件,此种方式可避免重复编写SQL脚本

XML实现映射器

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

 package com.java265.mapper;
import java.util.list;
import com.java265.po.Website;
public interface UserMapper{
public List<Website> selectAllWebsite();
}


UserInfo .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.java265.mapper.WebsiteMapper">

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

</mapper> 
下面对上述 XML 文件进行讲解。
  • namespace 用来定义命名空间,该命名空间和定义接口的全限定名一致。
  • <select> 元素表明这是一条查询语句,属性 id 用来标识这条 SQL。resultType 表示返回的是一个 Website 类型的值。
在 MyBatis 配置文件中添加以下代码 
  • <mapper resource="com/java265/mapper/UserInfo.xml" />

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

下面进行测试,用 SqlSession 来获取 Mapper,Test 类代码 
 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();
UserInfo userInfo= ss.getMapper(UserInfo.class);
List<UserInfo> userInfoList= userInfo.selectAllUserInfo();
for (UserInfo t: userInfoList) {
System.out.println(t);
}
ss.commit();
ss.close();
}
}


运行结果----
DEBUG [main] - ==>  Preparing: select * from userInfo
DEBUG [main] - ==> Parameters:
DEBUG [main] - <==      Total: 1
Website[id=1,name=Java爱好者]

注解实现映射器

使用注解的方式实现映射器,只需要在接口中使用 Java 注解,注入 SQL 即可。如下 
package com.java265.mapper;

import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.java265.po.UserInfo;

public interface UserInfo2 {
@Select(value = "select * from userInfo")
 public List<UserInfo> selectAllUserInfo();
 
}

这里我们使用了 @Select 注解,并且注入了和 XML 中相同的 select 语句
注意事项:
     当注解同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 其它命名空间缓存配置的引用 -
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/MyBatis/202107/534.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者