mybatis3 中 @Provider 的使用方式

?

若用MyBatis注解方式寫sql,又想要XML寫法的判斷入參拼接條件,可以通過@SelectProvider方式實現。

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。

新建Provider

public class RateProvider {private final String table_name = "rate_finish";public String getFinishRate(Map<String, Object> para) {String sql = "SELECT create_at FROM rate_finish WHERE 1=1 ";if (para.get("deviceType") != null ) {sql += "AND device_type = " + para.get("deviceType");}       sql += "ORDER BY homework_type";return sql;}
}

這里的 para 可以通過 key 方式或者 index 方式獲取對應參數。

新建Entity

public class RateFinish extends AbstractModel {private int id;private String deviceType;private String level;private String finishCount;private String count;private String homeworkType;private String createAt;

編寫 Mapper 接口,使用注解

    @SelectProvider(type = RateProvider.class, method = "getFinishRate")@Results({@Result(property = "homeworkType", column = "homework_type"),@Result(property = "deviceType", column = "device_type"),@Result(property = "level", column = "level"),@Result(property = "finishCount", column = "finish_count"),@Result(property = "count", column = "count"),@Result(property = "createAt", column = "create_at")})List<RateFinish> getFinishRate(@Param("deviceType") String deviceType;

說明:

注解中的參數:type參數指定的Class類,必須要能夠通過無參的構造函數來初始化;method參數指定的方法,必須是public的,返回值必須為String,可以為static。

例二

 @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}");}
}
public class SqlProvider {public String deleteUser(int id) {return new SQL() {{DELETE_FROM("USER");WHERE("ID= #{id}");}}.toString();}
}

?上例中定義了一個 Mapper 接口,其中定義了一個 getUser 方法,這個方法根據用戶 id 來獲取用戶信息,并返回相應的 User。而對應的 SQL 語句則寫在 SqlProvider 類中。

例三

1)一個參數的@SelectProvide方法
若在getUser方法中,userId使用了@Param注解,那么selectUser方法須以Map<String, Object>為參數:
UserMapper.java:

@SelectProvider(type?=?SqlProvider.class,?method?=?"selectUser2")
@ResultMap("userMap")
public?User?getUser(@Param("userId")?long?userId);

SqlProvider.java:

public?String?selectUser(Map<String,?Object>?para)?{return?"select?*?from?user?where?userId="?+?para.get("userId");
}

2)多參數的@SelectProvide方法
以 Map<String, Object> 為參數,
若有 @Param注解,則參數在 Map中以 @Param的值為 key,如下例中的 userId;
若參數未使用 @Param注解,則參數在 Map中以參數的順序為 key,如下例中的 password:

UserMapper.java:

?@SelectProvider(type?=?SqlProvider.class,?method?=?"selectUserCheck")@ResultMap("userMap")public?User?getUserCheck(@Param("userId")?long?Id,?String?password);

SqlProvider.java:

public?String?selectUserCheck(Map<String,?Object>?para)?{return?"select?*?from?user?where?userId="?+para.get("userId")?+?"?and?password='"?+?para.get("1")?+?"'";
}

?

注意:在Mapper接口和@SelectProvide方法類中,不要使用重載,也就是說,不要使用方法名相同參數不同的方法 。

?

轉自:

https://my.oschina.net/u/1000241/blog/1608635?nocache=1541480270547

http://www.cnblogs.com/JoeyWong/p/9457118.html

https://www.cnblogs.com/he-px/p/7134524.html

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447780.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447780.shtml
英文地址,請注明出處:http://en.pswp.cn/news/447780.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

科目三電子路考易錯細節總結

小編咨詢了多家駕校的教練員&#xff0c;總結了科目三電子路考中&#xff0c;考生犯錯率最高的幾個細節&#xff0c;下面就一起來看看是哪些吧&#xff0c;希望對還沒參加科目三考試的朋友有所幫助。 ●起步前不使用安全帶 在等待了約2小時后&#xff0c;考生史某終于坐上了考…

java 查詢功能實現的八種方式

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 只是記錄一下 1. HQL 2. Mybatis : mapper.xml 中寫 sql 。 3. Mybatis : 注解 Select Select("select * from xxx_order wher…

科目三夜考考試內容及過關攻略

駕考科目三夜考&#xff0c;考試內容是什么&#xff1f;夜考到底難不難&#xff1f;具體評判標準是什么&#xff1f;夜考有什么駕駛技巧嗎&#xff1f;本文&#xff0c;小編將一一為大家解析&#xff01; ●夜考過關攻略 場外考試的新增內容就是&#xff1a;在夜間和低能見度…

聯合索引:創建、刪除、查看 (解決報錯:Duplicate key name)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 創建聯合索引&#xff1a; CREATE INDEX idx_xxx_stitution ON xxx_order (status,institution_code) idx_xxx_stitution &#x…

科目三場外考試易出錯的環節

現在很多的城市都已經開始實行電子考試&#xff0c;這使得科目三考試更加公平公正&#xff0c;但還是有考生在考試中忽略了場外易出錯的環節導致成績不合格。●起步前不使用安全帶在等待了約2小時后&#xff0c;考生史某終于坐上了考試車。史某很興奮地調整了座位&#xff0c;觀…

FreeSql (八)插入數據時指定列

插入數據時指定列&#xff0c;和忽略列對應&#xff0c;未被指定的列將被忽略。 var connstr "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;" "Initial Catalogcccddd;Charsetutf8;SslModenone;Max pool size10";IFreeSql fsql new FreeSq…

mybatis 中 Example 的使用 :條件查詢、排序、分頁(三種分頁方式 : RowBounds、PageHelpler 、limit )

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 import tk.mybatis.mapper.entity.Example;import com.github.pagehelper.PageHelper;...Overridepublic List<Repayxxx> listRep…

科目三大路考8個駕駛技巧

駕考科目三考試&#xff0c;大路考的考試內容是什么&#xff0c;有什么考試要點&#xff0c;考試時&#xff0c;有哪些細節要注意&#xff1f;下面&#xff0c;就跟著小編一起來看看吧&#xff01; 科目三大路考駕駛技巧是在實際道路上駕駛機動車進行起步前的準備、起步、通過…

FreeSql (九)刪除數據

刪除是一個非常危險的操作&#xff0c;FreeSql對刪除支持并不強大&#xff0c;僅支持了單表有條件的刪除方法。 不想過多的介紹拉長刪除數據的系列文章&#xff0c;刪除數據的介紹僅此一篇。 若Where條件為空的時候執行方法&#xff0c;FreeSql僅返回0或默認值&#xff0c;不執…

解決: IDEA 代碼 commit 后,Local Changes 中代碼依舊在,提交失敗,報錯:is out of date

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 代碼提交后 Local Changes 中的代碼未消失。查看 Event log 發現提交失敗。 如下 紅框中位置就是 Event log&#xff0c;或者點擊…

FreeSql (十)更新數據

FreeSql支持豐富的更新數據方法&#xff0c;支持單條或批量更新&#xff0c;在特定的數據庫執行還可以返回更新后的記錄值。 var connstr "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;" "Initial Catalogcccddd;Charsetutf8;SslModenone;Max po…

科目三的7個小步驟

科目三路考中&#xff0c;做好幾個步驟就可以順利的通過考試了&#xff0c;以下來分享下路考中需要注意的幾個點。1、上車前&#xff0c;無論你在車輛的什么位置&#xff0c;請務必從車的右側繞過車頭走到駕駛室門前&#xff0c;先觀察車前道路上是否有障礙&#xff0c;再觀察車…

解決:The ‘Access-Control-Allow-Origin‘ header contains multiple values‘x, *‘, but only one is allowed.

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 跨域問題報錯&#xff1a; Access to XMLHttpRequest at http://xx.xx.xx.xx/getUser from origin http://ergouzi.fun has been bloc…

科目三道路考試技巧流程詳解

科目三是公認最難的考試科目&#xff0c;它不像科目二練習是在駕校訓練場&#xff0c;有些技術不錯的學員也會卡在這個項目上&#xff0c;由于突發狀況多&#xff0c;了解考試流程是必不可少的。考試流程&#xff1a;1、上車前的準備工作2、上車起步3、變更車道4、直線行駛5、學…

springbootajaxhas been blocked by CORS policy: No ‘Access-Control-Allow-Origin

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 ajaxspringboot解決跨域問題&#xff0c;以下報的錯誤就是html跨域的問題 Access to XMLHttpRequest at http://localhost:8080/user/l…

起步前要做哪些準備?

開車前&#xff0c;做好起步的準備工作是必不可少的&#xff0c;有的人可能還不知道開車前要做那些起步工作。一、開車起步前&#xff0c;檢查工作不能忘1、檢查車子輪胎是否完好&#xff0c;若發現輪胎有損毀&#xff0c;及時更換。2、檢查地面是否有會造成傷害的事或物&#…

什么是響應式布局設計

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 看一個例子&#xff1a;Mashable 的首頁&#xff1a; 瀏覽器窗口最大化時&#xff1a; 縮小瀏覽器窗口&#xff1a; 再縮小&#x…

科目三電子路考細節部分

科目三考試是電子監控&#xff0c;相對之前的考官監考更為嚴格&#xff0c;沒有了考官的提醒&#xff0c;我們更要注意什么&#xff1f;其實電子路考考的就是一種意識&#xff0c;一種安全意識。這也就是為什么在考試之前教練反復強調的不是技巧&#xff0c;而是打轉向燈按喇叭…

PHP 與 JSP 比較(PHP、ASP、JSP是什么)

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 PHP PHP&#xff08;Hypertext Preprocessor&#xff09;是一種嵌入HTML頁面中的腳本語言。它大量地借用C和Perl語言的語法&#xff0c;…

FreeSql (十四)批量更新數據

FreeSql支持豐富的更新數據方法&#xff0c;支持單條或批量更新&#xff0c;在特定的數據庫執行還可以返回更新后的記錄值。 var connstr "Data Source127.0.0.1;Port3306;User IDroot;Passwordroot;" "Initial Catalogcccddd;Charsetutf8;SslModenone;Max po…