關於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方法類中,不要使用重載,也就是說,不要使用方法名相同參數不同的方法。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- MyBatis註解開發-@Insert和@InsertProvider的使用
- mybatis3中@SelectProvider傳遞參數方式
- Mybatis CURD及模糊查詢功能的實現
- SpringBoot整合Mybatis簡單實現增刪改查
- 詳細聊聊Mybatis中萬能的Map