關于mybatis3中幾個@Provider的使用方式
Mybatis的原身是ibatis,現在已經脫離了apache基金會,新官網是http://www.mybatis.org/。
Mybatis3中增加了使用注解來配置Mapper的新特性,這里主要介紹@SelectProvider、@UpdateProvider、@InsertProvider和@DeleteProvider的使用方式
這幾個注解聲明在Mapper對應的interface的方法上的,注解用于生成查詢用的sql語句。如果對應的Mapper中已使用@Param來注解參數,則在對應的Prodiver的方法中無需寫參數。
注解中的參數:
type
參數指定的Class類,必須要能夠通過無參的構造函數來初始化;method
參數指定的方法,必須是public的,返回值必須為String,可以為static。
一、@SelectProvider
@ResultMap注解用于從查詢結果集RecordSet中取數據然后拼裝實體bean。
public interface UserMapper { ? ? ?@SelectProvider(type = SqlProvider.class, method = "selectUser") ? ? ?@ResultMap("userMap") ? ? ?public User getUser(long userId); }
public class SqlProvider { ? ? public String selectUser(long userId){ ? ? ? ? ?SELECT("id, name, email"); ? ? ? ? ? FROM("USER"); ? ? ? ? ? WHERE("ID = #{userId}"); ? ? } }
上例中定義了一個Mapper接口,其中定義了一個getUser方法,這個方法根據用戶id來獲取用戶信息,并返回相應的User。
而對應的SQL語句則寫在SqlProvider類中。
二、@InsertProvider
public interface UserMapper { ? ? @InsertProvider(type = SqlProvider.class, method = "addUser") ? ? @Options(useGeneratedKeys = true, keyProperty = "id") ? ? int addUser(Tutor tutor); }
public class SqlProvider { ? ? public String addUser(User user) { ? ? ? ? return new SQL() { ? ? ? ? ? ? { ? ? ? ? ? ? ? ? INSERT_INTO("USER"); ? ? ? ? ? ? ? ? if (user.getName() != null) { ? ? ? ? ? ? ? ? ? ? VALUES("NAME", "#{name}"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (user.getEmail() != null) { ? ? ? ? ? ? ? ? ? ? VALUES("EMAIL", "#{email}"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? } ? ? ? ? }.toString(); ? ? } }
三、@UpdateProvider
public interface UserMapper { ? ? @UpdateProvider(type = SqlProvider.class, method = "updateUser") ? ? int updateUser(User user); }
public class SqlProvider { ? ? public String updateUser(User user) { ? ? ? ? return new SQL() { ? ? ? ? ? ? { ? ? ? ? ? ? ? ? UPDATE("USER"); ? ? ? ? ? ? ? ? if (user.getName() != null) { ? ? ? ? ? ? ? ? ? ? SET("NAME = #{name}"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? if (user.getEmail() != null) { ? ? ? ? ? ? ? ? ? ? SET("EMAIL = #{email}"); ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? WHERE("ID= #{id}"); ? ? ? ? ? ? } ? ? ? ? }.toString(); ? ? } }
四、@DeleteProvider
public interface UserMapper { ? ? @DeleteProvider(type = SqlProvider.class, method = "deleteUser") ? ? int deleteUser(int id); }
public class SqlProvider { ? ? public String deleteUser(int id) { ? ? ? ? return new SQL() { ? ? ? ? ? ? { ? ? ? ? ? ? ? ? DELETE_FROM("USER"); ? ? ? ? ? ? ? ? WHERE("ID= #{id}"); ? ? ? ? ? ? } ? ? ? ? }.toString(); ? ? } }
注意:在Mapper接口和@SelectProvide方法類中,不要使用重載,也就是說,不要使用方法名相同參數不同的方法。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java 配置MyEclipse Maven環境具體實現步驟
這篇文章主要介紹了 java 配置MyEclipse Maven環境具體實現步驟的相關資料,具有一定的參考價值,需要的朋友可以參考下2016-11-11Springboot 使用內置tomcat禁止不安全HTTP的方法
這篇文章主要介紹了Springboot 使用內置tomcat禁止不安全HTTP的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07Spring Boot + Vue 前后端分離項目如何踢掉已登錄用戶
這篇文章主要介紹了Spring Boot + Vue 前后端分離項目如何踢掉已登錄用戶,需要的朋友可以參考下2020-05-05Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案
這篇文章主要介紹了Spring Cloud中使用Feign,@RequestBody無法繼承的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10JAVA StringBuffer類與StringTokenizer類代碼解析
這篇文章主要介紹了JAVA StringBuffer類與StringTokenizer類代碼解析,具有一定借鑒價值,需要的朋友可以參考下2018-01-01
最新評論