国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

你用過不寫代碼就能完成一個(gè)簡單模塊的組件么?

PiscesYE / 940人閱讀

開篇四連問
你是否懶得寫普通的增刪改查方法?
你是否不喜歡代碼生成插件的重復(fù)代碼?
你是否渴望一個(gè)沒有冗余代碼的項(xiàng)目?
你是否渴望一行代碼都不用寫就能完成一個(gè)簡單的模塊?
組件由來
作為后端程序員,相信大家都寫過以下幾種代碼:

根據(jù)主鍵查詢
多條件分頁查詢
插入
根據(jù)主鍵修改
根據(jù)主鍵刪除(單個(gè)或批量)
拋開業(yè)務(wù)來說,這幾種代碼是我們項(xiàng)目中最最基本的代碼了,每一個(gè)項(xiàng)目中都會出現(xiàn)大量的這種代碼。那么你的項(xiàng)目中這種代碼你是怎么寫的呢?

按照dao-service-controller的流程寫?
copy一個(gè)現(xiàn)有的模塊然后修修改改?
使用代碼生成插件?
自己封裝一個(gè)組件?
對于我個(gè)人來說,就是從上方四個(gè)步驟走過來的。剛剛開始學(xué)習(xí)Java的時(shí)候跟著老師的步驟從dao到service接口到實(shí)現(xiàn)類再到controller。等到參加工作的時(shí)候就覺得沒什么大不了的了,直接copy后進(jìn)行修改。工作一段時(shí)間以后覺得自己寫太累了然后就開始使用代碼生成插件。

但是使用插件一段時(shí)間以后我覺得每個(gè)項(xiàng)目中存在的太多太多的冗余代碼了,單單進(jìn)行全局搜索時(shí)一個(gè)方法名出現(xiàn)了幾十次,如果有一個(gè)插件的代碼需要修改那么就要修改幾十次,稍不注意就給自己挖了個(gè)坑等等。然后呢我就在想,既然這些都是冗余方法那么我何不自己封裝一個(gè)組件把這些東西都抽象出來做一個(gè)組件。以后開發(fā)時(shí)我只維護(hù)這一個(gè)組件,把剩余的精力放到業(yè)務(wù)代碼上呢?
我封裝的什么組件?
組件名稱:syj-minicode

當(dāng)一些單表的增刪改查時(shí)你只需要告訴前端來調(diào)用這幾個(gè)接口就行了
下方出現(xiàn)的entityName為當(dāng)前操作的對象名稱或者數(shù)據(jù)庫表名稱(注意命名規(guī)范要符合駝峰命名法,例如:UserOrder或者user_order都可以) 刪除接口為物理刪除,邏輯刪除請使用update接口

根據(jù)主鍵查詢對象

@RequestMapping(value = "/syj-api/{entityName}/{id}", method = RequestMethod.GET)
分頁查詢

@RequestMapping(value = "/syj-api/{entityName}/page", method = RequestMethod.POST)
@RequestBody: GridPageRequest
這里的GridPageRequest為分頁查詢的條件,看一下它的組成元素

/**

查詢關(guān)鍵字Map

*/
private Map searchMap;
/**

模糊查詢關(guān)鍵字Map

*/
private Map likeSearchMap;
/**

排序關(guān)鍵字Map

*/
private Map orderMap;
/**

分組關(guān)鍵字?jǐn)?shù)組

*/
private String[] groupArray;

private int pageNum;
private int pageSize;
前端查詢時(shí)只需要按照查詢條件組裝GridPageRequest對象就可以了

插入

@RequestMapping(value = "/syj-api/{entityName}/insert", method = RequestMethod.POST)
@RequestBody: Object(待插入對象)
根據(jù)主鍵進(jìn)行更新

@RequestMapping(value = "/syj-api/{entityName}/update", method = RequestMethod.PUT)
@RequestBody: Object(待更新對象)
根據(jù)主鍵進(jìn)行刪除

@RequestMapping(value = "/syj-api/{entityName}/{id}", method = RequestMethod.DELETE)
批量刪除

@RequestMapping(value = "/syj-api/{entityName}/deleteByIds", method = RequestMethod.DELETE)
@RequestBody: List ids(待刪除主鍵列表)
擴(kuò)展接口
因?yàn)槟J(rèn)情況下單個(gè)對象查詢、修改、刪除所依據(jù)的主鍵的字段名使用的都是"id",但是很可能有的項(xiàng)目使用的是userId、orderId、roleId等主鍵,如果你的項(xiàng)目符合這個(gè)條件注入下方這個(gè)bean。

@Bean
public IdField idField() {

Map map=new ConcurrentHashMap<>();
map.put("user","userId");//key的名稱為實(shí)體名稱或數(shù)據(jù)庫表名稱,value為主鍵屬性名
map.put("order","orderId");
map.put("role","roleId");
IdField idField=new IdField();
idField.setMap(map);
return idField;

}
有的項(xiàng)目在進(jìn)行插入和更新時(shí)會加入創(chuàng)建人和修改人等信息。如果有此需求請按照如下方式調(diào)用

插入擴(kuò)展
創(chuàng)建一個(gè)名為InsertExtend的bean并實(shí)現(xiàn)DefaultExtend接口

@Component
public class InsertExtend implements ExtendInterface{

@Override
public Map exectue() {
    Map map=new HashMap<>();
    map.put("createTime", System.currentTimeMillis());
    map.put("createBy", "創(chuàng)建人id");
    map.put("createUserName", "創(chuàng)建人名稱");
    return map;
}

}
更新擴(kuò)展
創(chuàng)建一個(gè)名為UpdateExtend的bean并實(shí)現(xiàn)DefaultExtend接口

@Component
public class UpdateExtend implements ExtendInterface{

@Override
public Map exectue() {
    Map map=new HashMap<>();
    map.put("updateTime", System.currentTimeMillis());
    map.put("updateBy", "修改人id");
    map.put("updateUserName", "修改人名稱");
    return map;
}

}
還有沒有更靈活的使用方式?
上方使用方式其實(shí)是直接抽象到了controller層,解決一般的需要是沒問題的,但是我們是有業(yè)務(wù)邏輯的,那么存在業(yè)務(wù)邏輯的情況下如何使用呢?
你可以在處理完業(yè)務(wù)邏輯后在service中調(diào)用

初始化

private BaseService getUserBaseService(){

    return ServiceBeanFactory.getBean("User");
}

根據(jù)id查詢

Map userMap=getUserBaseService().selectOneById("115");
User user=(User) BeanMapUtil.mapToBean(map,User.class);
根據(jù)條件查詢列表(相信你已經(jīng)知道了gridPageRequest對象如何組裝)

List> userMaps=getUserBaseService().selectBySelective(gridPageRequest);
for (Map map:userMaps){

User user=(User) BeanMapUtil.mapToBean(map,User.class);    

}
插入

getUserBaseService().insertSelective(user);
更新

getUserBaseService().updateByIdSelective(user);
刪除

getUserBaseService().deleteById("115");
批量刪除

List list=new ArrayList<>();
list.add("115");
list.add("116");
list.add("117");
getUserBaseService().deleteByIds(list);
組件好用么?
看完我的介紹你覺得這個(gè)組件能滿足你的基本需要么,如果可以話請移步下方的GitHub鏈接看一下這個(gè)組件的源碼寫的如何以及如何使用吧。

https://github.com/2388386839...

本文出自http://zhixiang.org.cn,轉(zhuǎn)載請...。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/71726.html

相關(guān)文章

  • 再見,Python!你好,Go語言

    摘要:語言誕生于谷歌,由計(jì)算機(jī)領(lǐng)域的三位宗師級大牛和寫成。作者華為云技術(shù)宅基地鏈接谷歌前員工認(rèn)為,比起大家熟悉的,語言其實(shí)有很多優(yōu)良特性,很多時(shí)候都可以代替,他已經(jīng)在很多任務(wù)中使用語言替代了。 Go 語言誕生于谷歌,由計(jì)算機(jī)領(lǐng)域的三位宗師級大牛 Rob Pike、Ken Thompson 和 Robert Griesemer 寫成。由于出身名門,Go 在誕生之初就吸引了大批開發(fā)者的關(guān)注。誕生...

    zhaot 評論0 收藏0
  • 邁出全棧第一步,vue+node+mysql獨(dú)立完成前后端分離增刪改查流程

    摘要:本使用創(chuàng)建本地服務(wù)器,在就能完成全部流程,并不需要線上服務(wù)器。路徑要與后端接口一致。后端返回成功后,前端數(shù)據(jù)中對應(yīng)的元素也要?jiǎng)h掉,更新視圖。控制器里拿一個(gè)方法出來說一下吧,完整的代碼都在。讀取操作完成后調(diào)用釋放連接。 寫在前面 本文只是本人學(xué)習(xí)過程的一個(gè)記錄,并不是什么非常嚴(yán)謹(jǐn)?shù)慕坛蹋M痛蠹乙黄鸸餐M(jìn)步。也希望大家能指出我的問題。適合有一定基礎(chǔ),志在全棧的前端初學(xué)者學(xué)習(xí),從點(diǎn)擊按鈕...

    fsmStudy 評論0 收藏0
  • 微信小程序開發(fā)小總結(jié)

    摘要:框架這部分是小程序開發(fā)的核心,小程序采用視圖和邏輯層代碼相分離的結(jié)構(gòu),如果你用過這部分也不難理解,但是也有一些區(qū)別。工具這部分沒有什么好說的,微信開發(fā)開始還是用微信自己的開發(fā)工具比較方便。 小程序開發(fā)文檔使用說明 小程序的文檔分為 簡易教程、框架、組件、API?、工具h(yuǎn)ttps://developers.weixin.qq.... 簡易教程---介紹小程序開發(fā)的一些基本情況 開發(fā)方式...

    niuxiaowei111 評論0 收藏0

發(fā)表評論

0條評論

PiscesYE

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<