關(guān)于mybatis3中幾個(gè)@Provider的使用方式
Mybatis的原身是ibatis,現(xiàn)在已經(jīng)脫離了apache基金會(huì),新官網(wǎng)是http://www.mybatis.org/。
Mybatis3中增加了使用注解來配置Mapper的新特性,這里主要介紹@SelectProvider、@UpdateProvider、@InsertProvider和@DeleteProvider的使用方式
這幾個(gè)注解聲明在Mapper對(duì)應(yīng)的interface的方法上的,注解用于生成查詢用的sql語句。如果對(duì)應(yīng)的Mapper中已使用@Param來注解參數(shù),則在對(duì)應(yīng)的Prodiver的方法中無需寫參數(shù)。
注解中的參數(shù):
type參數(shù)指定的Class類,必須要能夠通過無參的構(gòu)造函數(shù)來初始化;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來獲取用戶信息,并返回相應(yīng)的User。
而對(duì)應(yīng)的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ù)不同的方法。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決SpringBoot使用@Value獲取不到y(tǒng)aml中配置值的問題
在最近的開發(fā)中遇到一個(gè)問題,使用@Value獲取yml文件中配置的屬性時(shí)始終獲取不到值,所以本文給大家詳細(xì)介紹了SpringBoot使用@Value獲取不到y(tǒng)aml中值的問題分析及解決方法,需要的朋友可以參考下2024-01-01
mybatis?實(shí)現(xiàn)多層級(jí)collection嵌套
這篇文章主要介紹了mybatis?實(shí)現(xiàn)多層級(jí)collection嵌套,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03
RocketMQ重試機(jī)制及消息冪代碼實(shí)例解析
這篇文章主要介紹了RocketMQ重試機(jī)制及消息冪代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
SpringBoot3中Spring?WebFlux?SSE服務(wù)器發(fā)送事件的實(shí)現(xiàn)步驟
本文介紹了如何使用SpringBoot3和響應(yīng)式編程實(shí)現(xiàn)服務(wù)器發(fā)送事件(SSE),并討論了其在實(shí)時(shí)數(shù)據(jù)推送場(chǎng)景中的優(yōu)勢(shì),通過示例代碼,展示了如何創(chuàng)建SSE控制器、客戶端接收數(shù)據(jù)以及優(yōu)化與擴(kuò)展,感興趣的朋友跟隨小編一起看看吧2024-11-11
JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能(服務(wù)器)
這篇文章主要介紹了JavaWeb實(shí)現(xiàn)用戶登錄與注冊(cè)功能,服務(wù)器部分的關(guān)鍵代碼實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08

