【Smart插件】smart-plugin-mybatis 介紹

smart-plugin-mybatis 是Smart框架的一個Mybatis插件,使用這個插件你能夠比較方便的使用Mybatis。 java

這裏主要介紹如何在Smart中使用該插件。 mysql

smart-plugin-mybatis插件將mybatis的配置信息從mybatis-config.xml轉移到了smart.properties,該插件目前提供了幾個主要的配置選項,其餘比較經常使用的會看狀況添加。 git


首先使用Mybatis須要配置數據庫鏈接,在Smart中不須要額外的配置,只須要使用Smart原有的配置內容: sql

jdbc.type = mysql
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/sample
jdbc.username = root
jdbc.password = root
在Smart中配置的數據庫,仍然可使用Smart自帶的DataSet操做數據庫。


接下來是Mybatis獨有的配置,首先是Mybatis的別名(Aliases)配置,插件支持如下兩種別名配置方式: 數據庫

mybatis.aliases.package.pk1 = com.smart.sample.entity
mybatis.aliases.package.pk2 = com.smart.sample.bean

mybatis.aliases.name.Pro = com.smart.sample.entity.Product
mybatis.aliases.name.Ur = com.smart.sample.entity.User
第一種就是針對包進行別名設置,使用的mybatis.aliases.package.pkgname,這裏的 pkgname是爲了區分不一樣的包名,沒有其餘實際的意義,插件會根據後面的包名對整個包配置別名,會把類名做爲別名。多個包能夠像上面例子同樣配置多個,重名的類會衝突,這一點在使用的時候須要注意。


第二種是針對類進行別名的配置,使用的mybatis.aliases.name.AliasesName,這裏的AliasesName是要配置的別名,後面跟的是類的全限定名稱。 session

使用過Mybatis的人應該知作別名的做用,這裏在專門說明一下,別名一般是爲了方便寫代碼而配置的,一般會在resultType="Pro",也就是查詢的返回結果類型上。若是不用別名,就須要這麼寫resultType="com.smart.sample.entity.Product",後面這種寫法比較麻煩,優勢是直觀,能直接看到是哪一種類型。 mybatis


接下來是一個很不經常使用,不多見的Mybatis配置項: app

mybatis.logImpl = LOG4J
logImpl是一個不多見的配置,可是這個配置對Mybatis來講,極可能相當重要,可能就是你須要可是又找不到的一個配置選項,必定有很多人遇到過Mybatis沒法輸出日誌的狀況,經過配置logImpl可以順利的解決問題,上面的示例是針對log4j的,若是你有一個log4j.properties文件,只要rootLogger設置爲DEBUG你就能看到Mybatis的日誌,更多關於該配置的內容參看: http://blog.csdn.net/isea533/article/details/22931341


在Smart中,只須要填寫如上的配置便可使用log4j輸出日誌,除log4j外,還支持如下配置選項: 框架

SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING

除此以外,還能夠寫本身的實現類,在配置該參數時,須要填寫全限定類名。 url


再來看2個相關的最重要的配置,Mybatis支持Mapper接口形式的調用和xml形式的調用(以及二者的結合,一般是xml經過namespace關聯到Mapper接口,經過接口沒法找到相應的xml),在Smart中,對這兩種形式的配置以下:

##推薦的方式,推薦使用xml形式,多個xml使用逗號(,)隔開,支持文件夾形式.
mybatis.mapper.xml = /mapper,/sys/UserMapper.xml,/sys/RoleMapper.xml

##包掃描只能針對使用Mybatis註解的方法,如使用@Select註解的方法
mybatis.mapper.package = com.smart.sample.mapper
第一個是mybatis.mapper.xml,這個配置用來指定Mybatis加載那些Mybats的xml配置文件,這裏能夠配置多項,支持文件夾和xml文件兩種格式,多項之間使用逗號(,)隔開。這一個配置項也是smart-plugin-mybatis插件首先加載的內容。因爲Mybatis對同一個Mapper接口或xml中的namespace+id不容許重複,只會加載一次,因爲xml形式更豐富,更經常使用,而且能夠包含接口的形式,於是放在第一位進行加載,這裏強烈推薦使用這種配置。


第二個是mybatis.mapper.package,針對Mapper接口類進行掃描,這裏也容許多個包名逗號隔開。Mybatis在處理這種狀況時,只會處理含有Mybatis註解的方法,如標註了@Select的方法,沒有註解的方法調用的時候都會報錯(即便在xml裏面配置了,這種狀況也會失敗,由於經過接口沒法找到相應的xml)。

這裏還有一種沒有提到的方式,針對Mapper少的狀況可使用,這就是@Mapper註解,使用@Mapper不帶參數的註解時,處理方式和上面的第二個是同樣的,只會解決註解的狀況。當@Mapper("/sys/UserMapper.xml")這樣配置時,插件會優先去加載"/sys/UserMapper.xml",這就和第一種狀況同樣了,若是接口Mapper和xml一致,那麼接口中的註解方法也能識別,能夠正常調用。

因此第三種@Mapper註解的方式涵蓋了上述兩種狀況,並且還能省去配置文件,使用註解時,須要注意的是,插件只會檢測app.package(smart中的一個基本配置)包下的類。


最後還有一個參數和註解須要說明,在Mybatis中,推薦每個線程分配一個新的SqlSession,並且用戶必須在使用完SqlSession後必須關閉。於是爲了方便使用Mybatis,插件提供了一個Aop切面代理類,該切面類會在Smart中自動加載,這個代理會對全部標註了@Service註解(Smart業務層註解)的類進行代理。不須要對該aop代理進行任何配置。這裏要說的參數和註解都會對該aop代理行爲產生影響。先看以下參數配置:

##mybatis.session.auto - 默認爲false,即只有使用註解纔會自動處理Mybatis的Session
##                     - 當設置爲true的時候,會對全部@Service類的方法進行自動Session處理,即便在不須要使用Mybatis的地方也會觸發Session的自動處理,於是強烈不推薦使用該方法
mybatis.session.auto = false
參數mybatis.session.auto默認值爲false,這裏能夠不去配置,當配置爲true的時候aop代理會對代理內的全部方法執行代理,每一個方法執行的時候都會建立一個SqlSession,退出方法後會自動關閉SqlSession,出現異常時會自動回滾。因爲Service中不是每一個方法都要使用Mybatis,於是這種方式會影響效率影響數據庫的鏈接。因此這裏推薦不設置該參數,而使用@MybatisSession註解。


使用@MybatisSession註解的方法都會被aop代理自動處理SqlSession,另外提醒一下,若是須要在Service方法中調用Service方法,請不要使用該註解(若是調用了一個註解方法,會致使SqlSession關閉),本身手動關閉SqlSession是一種最好的解決辦法。


以上內容是smart-plugin-mybatis的配置介紹,下面簡單代碼說明如何在項目中使用Mybatis,以下:

UserMapper mapper = MybatisHelper.getMapper(UserMapper.class);

推薦使用接口來使用Mybatis,獲取mapper以後能夠正常調用接口方法。

還有另一種方式:

MybatisHelper.getSqlSession().selectOne("com.smart.sample.mapper.UserMapper.selectUserById",userid);

以上是Mybatis的兩種用法,在Smart中經過MyabtisHelper操做便可。


該插件項目地址:

http://git.oschina.net/free/smart/tree/master/smart-plugin-mybatis


更多有關Smart內容:

http://my.oschina.net/huangyong/blog?catalog=386891

相關文章
相關標籤/搜索