mybatis是什麼_MyBatis 為什麼需要通用 Mapper ?
技術標籤:mybatis是什麼mybatis通用mapper一個maven工程改了包名都需要改哪些配置類名.class是什麼用法通用mapper
一、通用 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開發工程師!