MyBatis?Mapper映射器的具體用法
映射器是 MyBatis 中最重要的文件,文件中包含一組 SQL 語句(例如查詢、添加、刪除、修改),這些語句稱為映射語句或映射 SQL 語句。
映射器由 Java 接口和 XML 文件(或注解)共同組成,它的作用如下。
- 定義參數(shù)類型
- 配置緩存
- 提供 SQL 語句和動態(tài) SQL
- 定義查詢結(jié)果和 POJO 的映射關(guān)系
映射器有以下兩種實現(xiàn)方式。
- 通過 XML 文件方式實現(xiàn),比如我們在 mybatis-config.xml 文件中描述的 XML 文件,用來生成 mapper。
- 通過注解的方式實現(xiàn),使用 Configuration 對象注冊 Mapper 接口。
如果 SQL 語句存在動態(tài) SQL 或者比較復(fù)雜,使用注解寫在 Java 文件里可讀性差,且增加了維護(hù)的成本。所以一般建議使用 XML 文件配置的方式,避免重復(fù)編寫 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 文件進(jìn)行講解。
- namespace 用來定義命名空間,該命名空間和定義接口的全限定名一致。
- <select> 元素表明這是一條查詢語句,屬性 id 用來標(biāo)識這條 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 會比該例子復(fù)雜得多。如果 SQL 語句中有多個表的關(guān)聯(lián)、多個查詢條件、級聯(lián)、條件分支等,顯然這條 SQL 就會復(fù)雜的多,所以并不建議讀者使用這種方式,此外,XML 可以相互引入,而注解是不可以的,所以在一些比較復(fù)雜的場景下,使用 XML 方式會更加靈活和方便。因此大部分的企業(yè)都以 XML 為主,本教程也會保持一致,以 XML 方式來創(chuàng)建映射器。當(dāng)然在一些簡單的表和應(yīng)用中使用注解方式也會比較簡單。
MyBatis 映射器的主要元素
下面介紹在映射器中可以定義哪些元素,以及它們的作用。
元素名稱 | 描述 | 備注 |
---|---|---|
mapper | 映射文件的根節(jié)點(diǎn),只有 namescape 一個屬性 | namescape 作用如下:
|
select | 查詢語句,最常用、最復(fù)雜的元素之一 | 可以自定義參數(shù),返回結(jié)果集等 |
insert | 插入語句 | 執(zhí)行后返回一個整數(shù),代表插入的條數(shù) |
update | 更新語句 | 執(zhí)行后返回一個整數(shù),代表更新的條數(shù) |
delete | 刪除語句 | 執(zhí)行后返回一個整數(shù),代表刪除的條數(shù) |
parameterMap | 定義參數(shù)映射關(guān)系 | 即將被刪除的元素,不建議使用 |
sql | 允許定義一部分的 SQL,然后在各個地方引用它 | 例如,一張表列名,我們可以一次定義,在多個 SQL 語句中使用 |
resultMap | 用來描述數(shù)據(jù)庫結(jié)果集與對象的對應(yīng)關(guān)系,它是最復(fù)雜、最強(qiáng)大的元素 | 提供映射規(guī)則 |
cache | 配置給定命名空間的緩存 | - |
cache-ref | 其它命名空間緩存配置的引用 | - |
關(guān)于 MyBatis 的 SQL 映射文件中的 mapper 元素的 namescape 屬性有如下要求。
- namescape 的命名必須跟某個 DAO 接口同名,同屬于 DAO 層,因此代碼結(jié)構(gòu)上,映射文件與該接口應(yīng)放置在同一 package 下(如 net.biancheng.dao.website),并且習(xí)慣上是以 Mapper 結(jié)尾(如 WebsiteMapper.java、WebsiteMapper.xml)。
- 不同的 mapper 文件中子元素的 id 可以相同,MyBatis 通過 namescape 和子元素的 id 聯(lián)合區(qū)分。接口中的方法與映射文件中的 SQL 語句 id 應(yīng)一 一對應(yīng)。
到此這篇關(guān)于MyBatis Mapper映射器的具體用法的文章就介紹到這了,更多相關(guān)MyBatis Mapper映射器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mybatisplus自動填充實現(xiàn)方式及代碼示例
這篇文章主要介紹了Mybatisplus自動填充實現(xiàn)方式及代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11struts1之簡單mvc示例_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了struts1之簡單mvc示例的相關(guān)資料,需要的朋友可以參考下2017-09-09java中File類的三種創(chuàng)建文件夾方法總結(jié)
這篇文章主要給大家介紹了關(guān)于java中File類的三種創(chuàng)建文件夾方法,File類代表文件或目錄路徑名的抽象表達(dá)形式,通過File類提供的方法,我們可以很方便地創(chuàng)建文件夾,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04Java使用Junit4.jar進(jìn)行單元測試的方法
今天通過本文給大家介紹Java使用Junit4.jar進(jìn)行單元測試的方法,本文通過圖文實例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-11-11Java如何找出數(shù)組中重復(fù)的數(shù)字
這篇文章主要為大家詳細(xì)介紹了Java如何找出數(shù)組中重復(fù)的數(shù)字,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08