@UpdateProvider註解中遇到的問題
忙碌了兩週,忙裡投個閒,記錄一下這兩天實習遇到的幾個小問題。
工作中遇到MyBatis資料庫儲存的問題,主要是為了以id更新同一張表的欄位,最早嘗試直接在mapper層打@update註解,寫入要實現的sql語句,然後在service層呼叫mapper,controller層中呼叫service,最後以這種方式直接實現了。
後面需求變更為更新多條記錄為多個欄位為不同的值,我師傅給我指導的時候建議我用mybatis 的@UpdateProvider註解方式,但是因為看太久單欄位的方式,同時看@UpdateProvider註解,鑽入了牛角尖,一直實現不了,又嘗試@update的方式。
用兩個@update來使用資料庫語句 (UPDATE table_name SET field1=new-value1 WHERE ID IN ();)即兩個update註解,兩個service呼叫。和其他同事聊天說了一下這個事情,認為這種方式對於有很多更新語句和資料庫呼叫的系統來說繁雜,不靈活。
但是網上大多是@SelectProvider,看了很多沒有@UpdateProvider的,也沒有看懂裡面的呼叫關係。 諮詢同事後,瞭解到呼叫關係如下,Controller呼叫Service,Service呼叫Mapper,Mapper呼叫Provider,關係瞭解後,去看了網上關於@SelectProvider註解的使用講解,我嘗試著做了如下步驟,在Mapper層:
@UpdateProvider(type = SqlProvider.class, method ="updateSta")
Integer updateSta(Map param);
type對應的provider檔案,這個檔案的作用是你可以自己定義很多sql語句,我用的直接返回拼接的sql語句的方式,還有其他方式,詳情見百度,這是我拼接的sql語句
(菜鳥,見笑了,拼接的時候建議對應關係寫完整後,執行測試,如果報出語法錯誤,複製錯誤到資料庫管理工具如DG裡執行一下,看下錯誤,在DG裡拼成正確的,可以執行的,再在Java中拼接):
public class SqlProvider {
public StringupdateStatus(Map param) {
return "UPDATE table SET sta='" + param.get("sta") +"' WHERE id IN " +"("+ param.get("Ids")+")";
}
這樣Mapper可以呼叫provider的內容。
service層中:使用@Resource註解,注入對應的Mapper資源,對應mapper的方法和傳入資料,呼叫Mapper的方法:
@Resource
private Mapper mapper;
public Integer updateSta(Map param) {
return mapper.updateSta(param); }
要注意的事,採用直接返回的方式,如果是String 型別,我學習過程中發現@SelectProvider註解是不支援的String,改為void 或Integer的方式是可以的。現在service已經成功呼叫Mapper,在Controller層,我們要做的就是注入Service,然後呼叫Service裡的對應的方法,傳入引數。
@Autowired
private Service service;
有一個問題,provider好像傳入的都是Map,,這個有時間我仔細研究一下:
這個是我的傳值處理:
Map param =new HashMap<>();
param.put("sta", sta);
param.put("Ids", Ids);
service.updateSta(param);
這裡的key值用於在provider通過get(key)的方式獲取對應的key的value值,詳情見我的SQL拼接。
結束!
相關文章
- CKEditor使用中遇到的問題解決
- 面試中遇到的問題面試
- javaweb中自己遇到的問題JavaWeb
- laravel使用中遇到的問題Laravel
- Hodoop配置中遇到的問題OdooOOP
- 工作中遇到的問題
- 遇到問題的解決方法
- kafka 運維中遇到的問題Kafka運維
- weex學習中遇到的問題
- hive學習中遇到的問題Hive
- Amigo學習(一)解決使用中遇到的問題Go
- 【專案中遇到的zookeeper的問題】
- 學習中遇到的javabean中的scope問題JavaBean
- 關於工作中遇到的問題
- loadrunner學習中遇到的問題
- 實際專案中遇到的問題
- 橫趟!面試中遇到的 ZooKeeper 問題面試
- 安裝 Laravel Mix 中遇到的問題Laravel
- Vue使用中遇到的程式碼問題Vue
- Linux ~ CentOS使用中遇到的問題LinuxCentOS
- MERGE開發中遇到的問題
- 面試中遇到的一些問題面試
- Fragstas軟體使用中遇到的問題
- Hadoop與HBase中遇到的問題Hadoop
- 安裝mysql中遇到的問題1MySql
- 利用JAXP解析xml中遇到的問題XML
- 爬蟲過程中遇到的問題爬蟲
- 微信小程式開發中遇到的問題及解決方式微信小程式
- 玩Deno遇到問題的解決方案
- 今天遇到的問題與解決方法
- 解決 plsql 遇到亂碼的問題SQL
- 解決在使用Amoeba遇到的問題
- 有待整理的工作中遇到的問題
- Rails 3 升級 Rails 4 中遇到的問題及解決方法AI
- Mysql安裝過程中遇到的問題及解決辦法MySql
- 學習vue過程中遇到的問題Vue
- 學習Java中遇到的繼承問題Java繼承
- css中經遇到的文字換行問題CSS