你用過不寫程式碼就能完成一個簡單模組的元件麼?
開篇四連問
-
你是否懶得寫普通的增刪改查方法?
-
你是否不喜歡程式碼生成外掛的重複程式碼?
-
你是否渴望一個沒有冗餘程式碼的專案?
-
你是否渴望一行程式碼都不用寫就能完成一個簡單的模組?
元件由來
作為後端程式設計師,相信大家都寫過以下幾種程式碼:
-
根據主鍵查詢
-
多條件分頁查詢
-
插入
-
根據主鍵修改
-
根據主鍵刪除(單個或批次)
拋開業務來說,這幾種程式碼是我們專案中最最基本的程式碼了,每一個專案中都會出現大量的這種程式碼。那麼你的專案中這種程式碼你是怎麼寫的呢?
-
按照dao-service-controller的流程寫?
-
copy一個現有的模組然後修修改改?
-
使用程式碼生成外掛?
-
自己封裝一個元件?
對於我個人來說,就是從上方四個步驟走過來的。剛剛開始學習Java的時候跟著老師的步驟從dao到service介面到實現類再到controller。等到參加工作的時候就覺得沒什麼大不了的了,直接copy後進行修改。工作一段時間以後覺得自己寫太累了然後就開始使用程式碼生成外掛。
但是使用外掛一段時間以後我覺得每個專案中存在的太多太多的冗餘程式碼了,單單進行全域性搜尋時一個方法名出現了幾十次,如果有一個外掛的程式碼需要修改那麼就要修改幾十次,稍不注意就給自己挖了個坑等等。然後呢我就在想,既然這些都是冗餘方法那麼我何不自己封裝一個元件把這些東西都抽象出來做一個元件。以後開發時我只維護這一個元件,把剩餘的精力放到業務程式碼上呢?
我封裝的什麼元件?
元件名稱:syj-minicode
當一些單表的增刪改查時你只需要告訴前端來呼叫這幾個介面就行了
下方出現的entityName為當前操作的物件名稱或者資料庫表名稱(注意命名規範要符合駝峰命名法,例如:UserOrder或者user_order都可以) 刪除介面為物理刪除,邏輯刪除請使用update介面
-
根據主鍵查詢物件
1 |
@RequestMapping(value = "/syj-api/{entityName}/{id}", method = RequestMethod.GET) |
-
分頁查詢
12 |
@RequestMapping(value = "/syj-api/{entityName}/page", method = RequestMethod.POST)@RequestBody: GridPageRequest |
這裡的GridPageRequest為分頁查詢的條件,看一下它的組成元素
12345678910111213141516171819 |
/** * 查詢關鍵字Map */private Map<String, String> searchMap;/** * 模糊查詢關鍵字Map */private Map<String, String> likeSearchMap;/** * 排序關鍵字Map */private Map<String, String> orderMap;/** * 分組關鍵字陣列 */private String[] groupArray;private int pageNum;private int pageSize; |
前端查詢時只需要按照查詢條件組裝GridPageRequest物件就可以了
-
插入
12 |
@RequestMapping(value = "/syj-api/{entityName}/insert", method = RequestMethod.POST)@RequestBody: Object(待插入物件) |
-
根據主鍵進行更新
12 |
@RequestMapping(value = "/syj-api/{entityName}/update", method = RequestMethod.PUT)@RequestBody: Object(待更新物件) |
-
根據主鍵進行刪除
1 |
@RequestMapping(value = "/syj-api/{entityName}/{id}", method = RequestMethod.DELETE) |
-
批次刪除
12 |
@RequestMapping(value = "/syj-api/{entityName}/deleteByIds", method = RequestMethod.DELETE)@RequestBody: List<String> ids(待刪除主鍵列表) |
擴充套件介面
-
因為預設情況下單個物件查詢、修改、刪除所依據的主鍵的欄位名使用的都是"id",但是很可能有的專案使用的是userId、orderId、roleId等主鍵,如果你的專案符合這個條件注入下方這個bean。
12345678910
@Beanpublic IdField idField() { Map<String,String> map=new ConcurrentHashMap<>(); map.put("user","userId");//key的名稱為實體名稱或資料庫表名稱,value為主鍵屬性名 map.put("order","orderId"); map.put("role","roleId"); IdField idField=new IdField(); idField.setMap(map); return idField;}
-
有的專案在進行插入和更新時會加入建立人和修改人等資訊。如果有此需求請按照如下方式呼叫
建立一個名為InsertExtend的bean並實現DefaultExtend介面
1234567891011
@Componentpublic class InsertExtend implements ExtendInterface{ @Override public Map<String, String> exectue() { Map<String, String> map=new HashMap<>(); map.put("createTime", System.currentTimeMillis()); map.put("createBy", "建立人id"); map.put("createUserName", "建立人名稱"); return map; }}
建立一個名為UpdateExtend的bean並實現DefaultExtend介面
1234567891011
@Componentpublic class UpdateExtend implements ExtendInterface{ @Override public Map<String, String> exectue() { Map<String, String> map=new HashMap<>(); map.put("updateTime", System.currentTimeMillis()); map.put("updateBy", "修改人id"); map.put("updateUserName", "修改人名稱"); return map; }}
-
更新擴充套件
-
插入擴充套件
還有沒有更靈活的使用方式?
上方使用方式其實是直接抽象到了controller層,解決一般的需要是沒問題的,但是我們是有業務邏輯的,那麼存在業務邏輯的情況下如何使用呢?
你可以在處理完業務邏輯後在service中呼叫
-
初始化
123
private BaseService getUserBaseService(){ return ServiceBeanFactory.getBean("User"); }
-
根據id查詢
12
Map<String,Object> userMap=getUserBaseService().selectOneById("115");User user=(User) BeanMapUtil.mapToBean(map,User.class);
-
根據條件查詢列表(相信你已經知道了gridPageRequest物件如何組裝)
1234
List<Map<String, Object>> userMaps=getUserBaseService().selectBySelective(gridPageRequest);for (Map<String, Object> map:userMaps){ User user=(User) BeanMapUtil.mapToBean(map,User.class); }
-
插入
1
getUserBaseService().insertSelective(user);
-
更新
1
getUserBaseService().updateByIdSelective(user);
-
刪除
1
getUserBaseService().deleteById("115");
-
批次刪除
12345
List<String> list=new ArrayList<>();list.add("115");list.add("116");list.add("117");getUserBaseService().deleteByIds(list);
元件好用麼?
看完我的介紹你覺得這個元件能滿足你的基本需要麼,如果可以話請移步下方的GitHub連結看一下這個元件的原始碼寫的如何以及如何使用吧。
本文出自 ,轉載請保留。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556373/viewspace-2216493/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 20行程式碼寫一個簡單 Blazor 時鐘元件行程Blazor元件
- 用Scroller完成一個簡單的ViewPagerViewpager
- 寫一個簡單的程式碼生成器
- 不到150行程式碼,寫一個簡單的Flutter狀態管理元件行程Flutter元件
- 用Java編寫一個最簡單的桌面程式Java
- 如何寫一個簡單的分頁元件(原理)元件
- 五個簡單的原則,帶你寫出整潔程式碼
- 用java寫一個貪食蛇的簡單AIJavaAI
- 用 webpack 寫一個簡單的 JS SDKWebJS
- 用PHP寫一個簡單的日曆PHP
- 簡單-定義一個小程式元件元件
- 用簡單的程式碼描述Angular父元件、子元件傳值Angular元件
- 用SwiftUI寫一個簡單頁面SwiftUI
- 用Flutter 寫一個簡單頁面Flutter
- 用Python寫一個簡單的Web框架PythonWeb框架
- React 實現一個簡單實用的 Form 元件ReactORM元件
- 怎麼用python寫簡單的遊戲指令碼?Python遊戲指令碼
- 用Vue3.0 寫過元件嗎?如果想實現一個 Modal你會怎麼設計?Vue元件
- 用express寫個簡單的CRUDExpress
- 教你如何寫一個簡單的折線圖控制元件控制元件
- [Vue]寫一個簡單的檔案上傳控制元件Vue控制元件
- 你真的能寫好一個單例麼?單例
- [手寫系列] 帶你實現一個簡單的PromisePromise
- 用Python寫一個簡單的微博爬蟲Python爬蟲
- 【RickTsuei】寫一個簡單的ASP.NET Web應用程式線上使用者列表控制元件ASP.NETWeb控制元件
- 幾個簡單的技巧讓你寫出的vue.js程式碼更優雅Vue.js
- 簡單寫一個eventbus
- 寫PHP程式碼你搞過單元測試嗎PHP
- 【從零開始寫一個簡單的ImageLoader框架】MyImageLoader程式碼簡介框架
- 10個簡單實用的 jQuery 程式碼片段jQuery
- 一個用delphi寫的整合彙編與api的簡單的視窗程式API
- javascript模組簡單寫法JavaScript
- 一條簡訊就能盜走你的賬戶密碼 駭客是怎麼做到的?密碼
- 用Java程式碼實現一個簡單的聊天室功能Java
- 我用Kotlin寫了一個精美的應用,你確定不來看下麼Kotlin
- 透過程式碼例項簡單瞭解Python sys模組Python
- 手寫一個Parser - 程式碼簡單而功能強大的Pratt Parsing
- 用 Go 編寫一個簡單的 WebSocket 推送服務GoWeb