關于mybatis3中幾個@Provider的使用方式
Mybatis的原身是ibatis,現(xiàn)在已經脫離了apache基金會,新官網(wǎng)是http://www.mybatis.org/。
Mybatis3中增加了使用注解來配置Mapper的新特性,這里主要介紹@SelectProvider、@UpdateProvider、@InsertProvider和@DeleteProvider的使用方式
這幾個注解聲明在Mapper對應的interface的方法上的,注解用于生成查詢用的sql語句。如果對應的Mapper中已使用@Param來注解參數(shù),則在對應的Prodiver的方法中無需寫參數(shù)。
注解中的參數(shù):
type參數(shù)指定的Class類,必須要能夠通過無參的構造函數(shù)來初始化;method參數(shù)指定的方法,必須是public的,返回值必須為String,可以為static。
一、@SelectProvider
@ResultMap注解用于從查詢結果集RecordSet中取數(shù)據(jù)然后拼裝實體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方法,這個方法根據(jù)用戶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方法類中,不要使用重載,也就是說,不要使用方法名相同參數(shù)不同的方法。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Netty源碼分析NioEventLoop初始化線程選擇器創(chuàng)建
這篇文章主要介紹了Netty源碼分析NioEventLoop初始化線程選擇器創(chuàng)建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03
使用Spring的JAVA Mail支持簡化郵件發(fā)送功能
這篇文章主要為大家詳細介紹了使用Spring的JAVA Mail支持簡化郵件發(fā)送功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04
Springboot實現(xiàn)Java郵件任務過程解析
這篇文章主要介紹了Springboot實現(xiàn)Java郵件任務過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-09-09

