日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybatis3 中 @Provider 的使用方式

發布時間:2023/12/18 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

?

?

?

總結

以上是生活随笔為你收集整理的mybatis3 中 @Provider 的使用方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。