關(guān)于mybatis3中幾個(gè)@Provider的使用方式
Mybatis的原身是ibatis,現(xiàn)在已經(jīng)脫離了apache基金會(huì),新官網(wǎng)是http://www.mybatis.org/。
Mybatis3中增加了使用注解來(lái)配置Mapper的新特性,這里主要介紹@SelectProvider、@UpdateProvider、@InsertProvider和@DeleteProvider的使用方式
這幾個(gè)注解聲明在Mapper對(duì)應(yīng)的interface的方法上的,注解用于生成查詢用的sql語(yǔ)句。如果對(duì)應(yīng)的Mapper中已使用@Param來(lái)注解參數(shù),則在對(duì)應(yīng)的Prodiver的方法中無(wú)需寫(xiě)參數(shù)。
注解中的參數(shù):
type
參數(shù)指定的Class類,必須要能夠通過(guò)無(wú)參的構(gòu)造函數(shù)來(lái)初始化;method
參數(shù)指定的方法,必須是public的,返回值必須為String,可以為static。
一、@SelectProvider
@ResultMap注解用于從查詢結(jié)果集RecordSet中取數(shù)據(jù)然后拼裝實(shí)體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}"); ? ? } }
上例中定義了一個(gè)Mapper接口,其中定義了一個(gè)getUser方法,這個(gè)方法根據(jù)用戶id來(lái)獲取用戶信息,并返回相應(yīng)的User。
而對(duì)應(yīng)的SQL語(yǔ)句則寫(xiě)在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方法類中,不要使用重載,也就是說(shuō),不要使用方法名相同參數(shù)不同的方法。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java開(kāi)發(fā)JUC交換器Exchanger使用詳解
這篇文章主要為大家介紹了Java開(kāi)發(fā)JUC交換器Exchanger使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12Java日期時(shí)間格式化操作DateUtils 的整理
這篇文章主要介紹了Java日期時(shí)間格式化操作DateUtils 的整理的相關(guān)資料,這里總結(jié)了java日期格式化的操作,需要的朋友可以參考下2017-07-07Netty源碼分析NioEventLoop初始化線程選擇器創(chuàng)建
這篇文章主要介紹了Netty源碼分析NioEventLoop初始化線程選擇器創(chuàng)建,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03使用Spring的JAVA Mail支持簡(jiǎn)化郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了使用Spring的JAVA Mail支持簡(jiǎn)化郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04基于java類路徑classpath和包的實(shí)例講解
下面小編就為大家分享一篇基于java類路徑classpath和包的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-01-01Springboot實(shí)現(xiàn)Java郵件任務(wù)過(guò)程解析
這篇文章主要介紹了Springboot實(shí)現(xiàn)Java郵件任務(wù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09