基於注解的Mybatis mapper 接口功能沒有mapper xml配置文件豐富,並且動態sql語句的靈活性不能和xml配置相比。
這里僅僅說一下基於注解的動態sql注意事項:
-
Mybatis提供注解 @InsertProvider, @UpdateProvider,@DeleteProvider和 @SelectProvider來提供動態sql功能。
-
提供動態sql的方法參數僅僅有2種可能:無參數和一個參數。一個參數又分為2種情況:參數類型和mapper 接口方法參數同樣,還有一個就是Map<String,Object>類型參數。這也就是說。你的mapper接口方法參數非常多非常多,而Mybatis會把他們放到map里面。這樣提供動態sql的方法中,能夠從map里面獲取。
-
提供動態sql的方法和xml配置動態sql非常大差別。提供動態sql的方法,大多是自己組裝sql(Mybatis提供的org.apache.ibatis. jdbc.SQL 功能也是非常有限制的),而xml配置的(mybatis有一套自己的動態sql語法)動態sql,Mybatis會解析,自己組裝sql。
-
mapper 接口方法的參數假設有多個,須要@Param 注解(沒有的話,Mybatis自己主動生成parm{i}等這種名字),由於直到java8 通過開啟編譯參數-parameters ,反射才會得到參數名稱,所以Mybaitis僅僅有通過方法參數注解獲得。Spring MVC里面的方法參數是通過字節碼操作的。
-
盡量用xml配置結合mapper 接口。
-
假設是動態創建表功能,要用${}。字符串直接替換。而不是用#{}(Mybatis用typeHandlers賦值取值)
-
假設Mybatis相應的java類型和數據庫類型沒有相應的映射關系(取值賦值),就僅僅能通過自己寫typeHandlers,給Mybatis配置實現。
比如java8 的新增的時間類型Mybatis如今還沒支持。
-
建議大家多讀幾遍英文版的Java Persistence with MyBatis 3