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

转自:

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

映射器简介说明:

 映射器是 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其它命名空间缓存配置的引用-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值