mybatis3 中 @Provider 的使用方式
?
若用MyBatis注解方式寫sql,又想要XML寫法的判斷入?yún)⑵唇訔l件,可以通過@SelectProvider方式實(shí)現(xiàn)。
前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到教程。
新建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 方式獲取對應(yīng)參數(shù)。
新建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;說明:
注解中的參數(shù):type參數(shù)指定的Class類,必須要能夠通過無參的構(gòu)造函數(shù)來初始化;method參數(shù)指定的方法,必須是public的,返回值必須為String,可以為static。例二
@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}");} } public class SqlProvider {public String deleteUser(int id) {return new SQL() {{DELETE_FROM("USER");WHERE("ID= #{id}");}}.toString();} }?上例中定義了一個(gè) Mapper 接口,其中定義了一個(gè) getUser 方法,這個(gè)方法根據(jù)用戶 id 來獲取用戶信息,并返回相應(yīng)的 User。而對應(yīng)的 SQL 語句則寫在 SqlProvider 類中。
例三
1)一個(gè)參數(shù)的@SelectProvide方法
若在getUser方法中,userId使用了@Param注解,那么selectUser方法須以Map<String, Object>為參數(shù):
UserMapper.java:
SqlProvider.java:
public?String?selectUser(Map<String,?Object>?para)?{return?"select?*?from?user?where?userId="?+?para.get("userId"); }2)多參數(shù)的@SelectProvide方法
以 Map<String, Object> 為參數(shù),
若有 @Param注解,則參數(shù)在 Map中以 @Param的值為 key,如下例中的 userId;
若參數(shù)未使用 @Param注解,則參數(shù)在 Map中以參數(shù)的順序?yàn)?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方法類中,不要使用重載,也就是說,不要使用方法名相同參數(shù)不同的方法 。
?
轉(zhuǎn)自:
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
?
?
?
總結(jié)
以上是生活随笔為你收集整理的mybatis3 中 @Provider 的使用方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决:RabbitMQ 连接报错:amq
- 下一篇: CPU,寄存器,内存三者的关系