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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

若依BaseEntity

發(fā)布時(shí)間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 若依BaseEntity 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、為什么要使用BaseEntity

我們?cè)诳慈粢赖臄?shù)據(jù)庫表中,有一些表字段是每個(gè)表都有,如createBy、createTime、updateBy、updateTime、remark等等,還有一些公共方法,如搜索值searchValue,前端傳來的請(qǐng)求參數(shù)params?,大部分實(shí)體類可能需要,在若依新建POJO對(duì)象時(shí) 如果你每個(gè)對(duì)象都定義會(huì)造成大量冗余代碼,不利于維護(hù),把它們抽取出來定義一個(gè)通用的實(shí)體類BaseEntity。讓新建pojo繼承它們。有點(diǎn)類似AOP,子類繼承了父類,也繼承了父類的屬性和方法,這樣可以簡化代碼,靈活多變。

public class BaseEntity implements Serializable { // 反序列化private static final long serialVersionUID = 1L;/** 搜索值 */private String searchValue;/** 創(chuàng)建者 */private String createBy;/** 創(chuàng)建時(shí)間 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;/** 更新者 */private String updateBy;/** 更新時(shí)間 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;/** 備注 */private String remark;/** 請(qǐng)求參數(shù) *///當(dāng)一些沒有這些字段的時(shí)候,可以存在mapprivate Map<String, Object> params;public String getSearchValue(){return searchValue;}public void setSearchValue(String searchValue){this.searchValue = searchValue;}public String getCreateBy(){return createBy;}public void setCreateBy(String createBy){this.createBy = createBy;}public Date getCreateTime(){return createTime;}public void setCreateTime(Date createTime){this.createTime = createTime;}public String getUpdateBy(){return updateBy;}public void setUpdateBy(String updateBy){this.updateBy = updateBy;}public Date getUpdateTime(){return updateTime;}public void setUpdateTime(Date updateTime){this.updateTime = updateTime;}public String getRemark(){return remark;}public void setRemark(String remark){this.remark = remark;}public Map<String, Object> getParams(){if (params == null){params = new HashMap<>();}return params;}public void setParams(Map<String, Object> params){this.params = params;} }

2、序列化和反序列化

在BaseEntity中實(shí)現(xiàn)了序列化和反序列化。

什么是序列化和反序列化呢

序列化是將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或傳輸?shù)男问降倪^程。在序列化期間,對(duì)象將其當(dāng)前狀態(tài)寫入到臨時(shí)或持久性存儲(chǔ)區(qū)。就通過從存儲(chǔ)區(qū)中讀取或反序列化對(duì)象的狀態(tài),重新創(chuàng)建該對(duì)象。在計(jì)算機(jī)中文本、圖片、音頻、視頻都是以二進(jìn)制序列的形式存儲(chǔ)和傳輸,序列化可簡單理解為將對(duì)象轉(zhuǎn)變?yōu)槎M(jìn)制序列存儲(chǔ)傳輸?shù)囊环N方法。序列化可以說成Java中的對(duì)象或者數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換成二進(jìn)制的過程。而反序列化是與其相反,將二進(jìn)制恢復(fù)到Java中對(duì)象或者數(shù)據(jù)結(jié)構(gòu)的過程。

序列化就是對(duì)實(shí)例對(duì)象的狀態(tài)(State 對(duì)象屬性而不包括對(duì)象方法)進(jìn)行通用編碼(如格式化的字碼)并保存,以保證對(duì)象的完整性和可傳遞性。簡而言之:序列化,就是為了在不同時(shí)間或不同平臺(tái)的JVM之間共享實(shí)例對(duì)象

public class BaseEntity implements Serializable

而反序列化就是Java的序列化機(jī)制是通過在運(yùn)行時(shí)判斷類的serialVersionUID來驗(yàn)證版本一致性的。在進(jìn)行反序列化時(shí),JVM會(huì)把傳來的字節(jié)流中的serialVersionUID與本地相應(yīng)實(shí)體(類)的serialVersionUID進(jìn)行比較,如果相同就認(rèn)為是一致的,可以進(jìn)行反序列化,否則就會(huì)出現(xiàn)序列化版本不一致的異常。

private static final long serialVersionUID = 1L;

搜索值

/** 搜索值 */private String searchValue; searchValue這個(gè)字段在數(shù)據(jù)庫中是沒有的,但是在大多數(shù)查詢的情況下,都是要用來搜索值,主要是用來前端搜索出傳來的值,在ry.js可以發(fā)現(xiàn) // 查詢條件queryParams: function(params) {table.set();var curParams = {// 傳遞參數(shù)查詢參數(shù)pageSize: params.limit,pageNum: params.offset / params.limit + 1,searchValue: params.search,orderByColumn: params.sort,isAsc: params.order};var currentId = $.common.isEmpty(table.options.formId) ? $('form').attr('id') : table.options.formId;return $.extend(curParams, $.common.formToJSON(currentId)); },

@JsonFormat 在加了該注解就會(huì)在以yyyy-MM-dd HH:mm:ss的形式返回給前端

/** 創(chuàng)建時(shí)間 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;

?Map<String, Object> params;接收post請(qǐng)求傳遞過來的條件查詢params參數(shù),而不需要另外創(chuàng)建Vo。

private Map<String, Object> params;

如在mapper.xml中進(jìn)行的切面編程,因?yàn)槟承﹫?chǎng)景下需要多表關(guān)聯(lián)進(jìn)行數(shù)據(jù)權(quán)限的過濾,此時(shí)可以用?Map<String, Object> params進(jìn)行拼接

<if test="deptId != null and deptId != 0">AND (u.dept_id = #{deptId} OR u.dept_id IN ( SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET (#{deptId},ancestors) ))</if><!-- 數(shù)據(jù)范圍過濾 與注解DataScope相對(duì)應(yīng)-->${params.dataScope}

?在DataScopeAspect切面類進(jìn)行使用,主要是進(jìn)行權(quán)限查詢的拼接。因?yàn)椴煌挠脩魧?duì)應(yīng)得dept和role不同,他們有不同的權(quán)限。

總結(jié)

以上是生活随笔為你收集整理的若依BaseEntity的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。