1. 程式人生 > 其它 >mybatis是什麼_MyBatis 為什麼需要通用 Mapper ?

mybatis是什麼_MyBatis 為什麼需要通用 Mapper ?

技術標籤:mybatis是什麼mybatis通用mapper一個maven工程改了包名都需要改哪些配置類名.class是什麼用法通用mapper

bab234b5982bf9c37e136639b17b3fb3.gif一、通用 Mapper 的用途 ?

我個人最早用 MyBatis 時,先是完全手寫,然後用上了 MyBatis 程式碼生成器(簡稱為 MBG),在使用 MBG 過程中,發現一個很麻煩的問題,如果資料庫欄位變化很頻繁,就需要反覆重新生成程式碼,並且由於 MBG 覆蓋生成程式碼和追加方式生成 XML,導致每次重新生成都需要大量的比對修改。除了這個問題外,還有一個問題,僅僅基礎的增刪改查等方法,就已經產生了大量的 XML 內容,還沒有新增一個自己手寫的方法,程式碼可能就已經幾百行了,內容多,看著比較礙事。

因為很多人都在使用 MBG,MBG 中定義了很多常用的單表方法,為了解決前面提到的問題,也為了相容 MBG 的方法避免專案重構太多,在 MBG 的基礎上結合了部分 JPA 註解產生了通用 Mapper。通用 Mapper 可以很簡單的讓你獲取基礎的單表方法,也很方便擴充套件通用方法。使用通用 Mapper 可以極大的提高你的工作效率。

通過下面的快速入門,會讓你儘快的瞭解基本的用法。

二、快速入門

為了讓你更快速的瞭解通用 Mapper 的優勢,這裡會更簡潔的讓你瞭解整個過程。

首先在 Maven 專案的 pom.xml 中新增通用 Mapper 依賴:

<dependency>

<groupId>tk.mybatisgroupId> <artifactId>mapperartifactId> <version>最新版本version>dependency>

接下來,開始具體的使用。

1. 配置實體類

通過 MBG 配合 專用程式碼生成器 可以直接生成實體類等基礎程式碼,為了避免資訊量過大,這裡當作手工編寫和配置。

有如下類:

public class Country implements Serializable {    private static final long serialVersionUID = 1L;    @Id    @KeySql(useGeneratedKeys = true)    private Long id;    private String countryname;    private String countrycode;    //setter 和 getter 方法}

在上面類中,我們給主鍵添加了 @Id,標記該欄位為資料庫主鍵。還有一個通用 Mapper 的特殊註解 @KeySql,配置的 useGeneratedKeys = true 和 MyBatis 中的 useGeneratedKeys 含義相同,意思是說使用 JDBC 的方式獲取資料庫自增的主鍵值。

該類對應資料表為 country,因為類名和資料庫名對應(當前資料庫忽略大小寫),因此不需要在類上新增 @Table(name = "country")。

經過上面簡單的配置後,相當於就有了 MyBatis 中的 關係映射了,特別注意,這個對映關係只對通用 Mapper 有效,自己手寫方法時,需要自己處理對映關係。

2. 建立 Mapper 介面

根據上述實體類,建立對應的 CountryMapper 介面如下:

mport tk.mybatis.mapper.common.Mapper;public interface CountryMapper extends Mapper<Country> {}

這裡繼承了 tk.mybatis.mapper.common.Mapper 介面,在介面上指定了泛型型別 Country。當你繼承了 Mapper 介面後,此時就已經有了針對 Country 的大量方法,方法如下:

這些方法中和 MBG 生成的大部分方法都一致,還有一部分 MBG 之外的常用方法。

3. 配置通用 Mapper

為了讓上述方法可以直接使用,還需要配置通用 Mapper,讓專案在啟動的時候,把上述方法都自動生成好,這樣在執行時就可以使用上面所有的方法。

根據不同的開發環境,需要不同的配置方式,完整的內容可以 整合通用 Mapper,我們這裡以最常見的 Spring 和 MyBatis 整合為例。

在整合 Spring 的環境中使用 MyBatis 介面方式時,需要配置 MapperScannerConfigurer,在這種情況下使用通用 Mapper,只需要修改配置如下:

class=    <property name="basePackage" value="掃描包名"/>    bean>

注意官方的包名和這裡 tk 包名的區別:

tk.mybatis.spring.mapper.MapperScannerConfigurerorg.mybatis.spring.mapper.MapperScannerConfigurer

只有第一部分從 org 換成了 tk。

此時通用 Mapper 最簡單的配置就完成了,完整的配置可以看這裡 和 Spring 整合。

4. 簡單使用

下面是一個簡單的測試用例,實際使用中,可以直接注入 CountryMapper。

public class SpringXmlTest {    private ClassPathXmlApplicationContext context;    @Test    public void testCountryMapper() {        context = new ClassPathXmlApplicationContext("tk/mybatis/mapper/xml/spring.xml");        CountryMapper countryMapper = context.getBean(CountryMapper.class);    //獲取全部資訊        List countries = countryMapper.selectAll();        Assert.assertNotNull(countries);        Assert.assertEquals(183, countries.size());    }}

通用 Mapper 只是提供了基礎的大量方法,遇到沒有的方法時,你可以正常按照 MyBatis 的用法手寫,和正常用法沒有任何區別。

歡迎關注“Java的引導者”,我們分享最有價值的Java的乾貨文章,助力您成為有思想的Java開發工程師!

c37071c71dc846dce32ac2abc6ce5b7f.gif