映射SQL語句
此時,您可能想知道SqlSession 或者映射器類(Mapper class)是怎樣執行的。映射SQL
語句是一個很大的主題,該主題將可能占據本文檔的大部分內容。但是,為了讓您看到它是怎樣
運行的,這裡舉兩個例子。
在上麵的例子中,映射語句已經在XML 配置文件或注解中定義。讓我們首先來看看XML 配置
文件,所有MyBatis 提供的功能特性都可以通過基於XML 映射配置文件配置來實現。如果您以前
使用過MyBatis,對此就會很熟悉。但許多改進使XML 映射文件變得更簡潔清晰。下麵是一個基
於XML 映射配置的例子,滿足上述SqlSession 的調用。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" parameterType="int" resultType="Blog">select * from Blog where id = #{id}</select></mapper>
這個簡單的例子看起來有不少的開銷,但它確實非常地輕巧,隻要您喜歡,您可以在一個映
射XML 文件中定義許多映射語句。雖然會有一些XML 頭部和DOCTYPE 聲明,但該文件餘下的部分
是自解(self explanatory,可理解為不加解釋就能明白)的。它定義了映射語句的名稱
“selectBlog”,在命名空間“org.mybatis.example.BlogMapper”,允許您通過指定完整類名
“org.mybatis.example.BlogMapper”來訪問上麵的例子:
Blog blog = (Blog) session.selectOne( "org.mybatis.example.BlogMapper.selectBlog", 101);
這非常類似java 中通過完整類名來調用方法,而這樣做是有原因的。這個名稱可以直接映射
到一個具在相同命名空間的映射類,這個映射類有一個方法的名稱、參數及返回類型都與select
映射語句相匹配。正如您前麵看到的,這使您很簡單地調用映射類裡的方法,下麵是另外的一個
例子:
BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101);
第二種方法有很多好處。第一,它不依賴於字符串,所以更安全。第二,如果您的IDE 有自
動完成功能,您可以利用這功能很快導航到您的映射SQL 語句。第三,您不需要關注返回類型,
不需要進行強製轉換,因為使用BlogMapper 接口已經限定了返回類型,它會安全地返回。
關於命名空間
1、命名空間:在以前的版本中是可選的、複雜的且冇多大用處。但在這個版本中,命名空間是必
須的,並且不僅僅是簡單地使用完整類名來隔離區分語句。
正如您看到的那樣,命名空間能夠進行接口綁定,即使您認為現在不會使用到它,但您應該
按照這些準則來做。一旦使用了命名空間並且放入適當的java 包命名空間中將會使您的代碼清
晰,並提高MyBatis 的長期可用性。
2、名稱解析: 為了減少大量地輸入, MyBatis 對所有的配置元素,包括statements、result
maps、caches 等使用下麵的名稱解析規則:
• 完整類名:(例如: “com.mypackage.MyMapper.selectAllThings”)可用來直接查找並
使用。
• 短名稱: (例如: “selectAllThings”)可用來引用明確的實體對象。但是,如果出現有
兩個或更多(例如“com.foo.selectAllThings 和com.bar.selectAllThings”)實體對
象,您將收到一個錯誤報告(短名稱含糊不清),因此,這時就必須使用完整類名。
對映射類還有一個更好的方法,就像前麵的BlogMapper。它們的映射語句不需要完全在XML
中配置。相反,它們可以使用Java 注解。例如上麵的XML 配置可以替換為:
package org.mybatis.example; public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); }
對簡單的映射語句,使用注解可以顯得非常地清晰。但是java 注解本身的局限難於應付更複
雜的語句。如果您準備要做某些複雜的事情,最好使用XML 文件來配置映射語句。
這將由您和您的項目小組來確定哪種方式是適合的,以一致的方式來定義映射語句是非常重
要的。也就是說,您不會被限於僅用一種方式。您能夠非常容易地從基於注解的映射語句移植到
XML 配置文件中,反之亦然。