隔了兩周,首先回顧一下,在Mybatis中的SqlMapper配置文件中引入的幾個擴(kuò)展機(jī)制:
1.引入SQL配置函數(shù),簡化配置、屏蔽DB底層差異性
2.引入自定義命名空間,允許自定義語句級元素、腳本級元素
3.引入表達(dá)式配置,擴(kuò)充SqlMapper配置的表達(dá)能力
前面兩條已經(jīng)舉過例子,現(xiàn)在來看看怎么使用表達(dá)式配置。說到表達(dá)式語言,最為富麗堂皇的自然就是OGNL,但這也正是Mybatis內(nèi)部訪問數(shù)據(jù)的固有方式,所以也輪不到我們在這里來擴(kuò)充了(事實上Mybatis的參數(shù)設(shè)置并不能使用完全的OGNL)。那么,除了OGNL,還有哪些表達(dá)式語言呢?別忘了,我們的前提是Spring環(huán)境,自然,SpEL表達(dá)式也就走入我們的視野,因此這篇文章就重點記錄在SqlMapper中使用SpEL表達(dá)式。
四、在Mybatis中的SqlMapper使用SpEL表達(dá)式
1.SpEL工具類
SpEL就是Spring提供的EL表達(dá)式,雖然到Spring3才開始推出,但已經(jīng)是Spring的一個基礎(chǔ)核心模塊了,地位已經(jīng)差不多等同于IoC和AOP了。SpEL和OGNL類似,也有表達(dá)式、上下文環(huán)境、root對象等概念,但和OGNL不同的是,SpEL還提供了訪問Spring中bean的能力——這是非常強悍的,試問一個Spring應(yīng)用有多少類不是Spring管理的呢?具體的SpEL語法細(xì)節(jié)可以參考Spring的官方文檔。
SpEL目前主要應(yīng)用于Spring的配置,使用起來非常方便,但是在Java類中使用則比較繁瑣,稍微實用一點的例子都需要創(chuàng)建解析器實例、創(chuàng)建執(zhí)行環(huán)境、解析表達(dá)式、對表達(dá)式求值等步驟,如果需要訪問Spring的Bean,還要設(shè)置BeanFactoryResolver等,因此,為了簡化SpEL在Java中的應(yīng)用,我編寫了一個SpEL的幫助類:
這個工具類分成四個部分:
- 實現(xiàn)ApplicationContextAware接口,注入ApplicationContext(BeanFactory)對象
-
表達(dá)式求值方法
- 對表達(dá)式簡單求值(還可指定返回的目標(biāo)類型)
- 指定root對象,對表達(dá)式求值(還可指定返回的目標(biāo)類型)
- 指定root對象和其它變量,對表達(dá)式求值(還可指定返回的目標(biāo)類型)
-
表達(dá)式設(shè)置方法
- 設(shè)置表達(dá)式的值
- 指定root對象,設(shè)置表達(dá)式的值
- 指定root對象和其它變量,設(shè)置表達(dá)式的值
-
變量管理方法
- 添加變量
- 移除變量