MyBatis?Mapper映射器的具體用法
映射器是 MyBatis 中最重要的文件,文件中包含一組 SQL 語句(例如查詢、添加、刪除、修改),這些語句稱為映射語句或映射 SQL 語句。
映射器由 Java 接口和 XML 文件(或注解)共同組成,它的作用如下。
- 定義參數(shù)類型
- 配置緩存
- 提供 SQL 語句和動態(tài) SQL
- 定義查詢結果和 POJO 的映射關系
映射器有以下兩種實現(xiàn)方式。
- 通過 XML 文件方式實現(xiàn),比如我們在 mybatis-config.xml 文件中描述的 XML 文件,用來生成 mapper。
- 通過注解的方式實現(xiàn),使用 Configuration 對象注冊 Mapper 接口。
如果 SQL 語句存在動態(tài) SQL 或者比較復雜,使用注解寫在 Java 文件里可讀性差,且增加了維護的成本。所以一般建議使用 XML 文件配置的方式,避免重復編寫 SQL 語句。
XML實現(xiàn)映射器
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">
<!-- 查詢所有網(wǎng)站信息 -->
<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 文件,生成映射器。
注解實現(xiàn)映射器
使用注解的方式實現(xiàn)映射器,只需要在接口中使用 Java 注解,注入 SQL 即可。如下所示。
public interface WebsiteMapper2 {
@Select(value = "select * from website")
public List<Website> selectAllWebsite();
}這里我們使用了 @Select 注解,并且注入了和 XML 中相同的 select 語句。
如果使用注解和 XML 文件兩種方式同時定義,那么 XML 方式將覆蓋掉注解方式。
雖然這里注解的方式看起來比 XML 簡單,但是現(xiàn)實中我們遇到的 SQL 會比該例子復雜得多。如果 SQL 語句中有多個表的關聯(lián)、多個查詢條件、級聯(lián)、條件分支等,顯然這條 SQL 就會復雜的多,所以并不建議讀者使用這種方式,此外,XML 可以相互引入,而注解是不可以的,所以在一些比較復雜的場景下,使用 XML 方式會更加靈活和方便。因此大部分的企業(yè)都以 XML 為主,本教程也會保持一致,以 XML 方式來創(chuàng)建映射器。當然在一些簡單的表和應用中使用注解方式也會比較簡單。
MyBatis 映射器的主要元素
下面介紹在映射器中可以定義哪些元素,以及它們的作用。
| 元素名稱 | 描述 | 備注 |
|---|---|---|
| mapper | 映射文件的根節(jié)點,只有 namescape 一個屬性 | namescape 作用如下:
|
| select | 查詢語句,最常用、最復雜的元素之一 | 可以自定義參數(shù),返回結果集等 |
| insert | 插入語句 | 執(zhí)行后返回一個整數(shù),代表插入的條數(shù) |
| update | 更新語句 | 執(zhí)行后返回一個整數(shù),代表更新的條數(shù) |
| delete | 刪除語句 | 執(zhí)行后返回一個整數(shù),代表刪除的條數(shù) |
| parameterMap | 定義參數(shù)映射關系 | 即將被刪除的元素,不建議使用 |
| sql | 允許定義一部分的 SQL,然后在各個地方引用它 | 例如,一張表列名,我們可以一次定義,在多個 SQL 語句中使用 |
| resultMap | 用來描述數(shù)據(jù)庫結果集與對象的對應關系,它是最復雜、最強大的元素 | 提供映射規(guī)則 |
| 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 聯(lián)合區(qū)分。接口中的方法與映射文件中的 SQL 語句 id 應一 一對應。
到此這篇關于MyBatis Mapper映射器的具體用法的文章就介紹到這了,更多相關MyBatis Mapper映射器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java異常處理 Throwable實現(xiàn)方法解析
這篇文章主要介紹了Java異常處理 Throwable實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10
Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢操作
Nebula?Graph?是一款開源的、分布式的、易擴展的原生圖數(shù)據(jù)庫,能夠承載包含數(shù)千億個點和數(shù)萬億條邊的超大規(guī)模數(shù)據(jù)集,并且提供毫秒級查詢,這篇文章主要介紹了Nebula?Graph介紹和SpringBoot環(huán)境連接和查詢,需要的朋友可以參考下2022-10-10

