一、为什么要使用BaseEntity

我们在看若依的数据库表中,有一些表字段是每个表都有,如createBy、createTime、updateBy、updateTime、remark等等,还有一些公共方法,如搜索值searchValue,前端传来的请求参数params ,大部分实体类可能需要,在若依新建POJO对象时 如果你每个对象都定义会造成大量冗余代码,不利于维护,把它们抽取出来定义一个通用的实体类BaseEntity。让新建pojo继承它们。有点类似AOP,子类继承了父类,也继承了父类的属性和方法,这样可以简化代码,灵活多变。

public class BaseEntity implements Serializable
{
//    反序列化private static final long serialVersionUID = 1L;/** 搜索值 */private String searchValue;/** 创建者 */private String createBy;/** 创建时间 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;/** 更新者 */private String updateBy;/** 更新时间 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date updateTime;/** 备注 */private String remark;/** 请求参数 *///当一些没有这些字段的时候,可以存在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中实现了序列化和反序列化。

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

序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。就通过从存储区中读取或反序列化对象的状态,重新创建该对象。在计算机中文本、图片、音频、视频都是以二进制序列的形式存储和传输,序列化可简单理解为将对象转变为二进制序列存储传输的一种方法。序列化可以说成Java中的对象或者数据结构转换成二进制的过程。而反序列化是与其相反,将二进制恢复到Java中对象或者数据结构的过程。

序列化就是对实例对象的状态(State 对象属性而不包括对象方法)进行通用编码(如格式化的字码)并保存,以保证对象的完整性和可传递性。简而言之:序列化,就是为了在不同时间或不同平台的JVM之间共享实例对象

public class BaseEntity implements Serializable

而反序列化就是Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。

    private static final long serialVersionUID = 1L;

搜索值

   /** 搜索值 */private String searchValue;
searchValue这个字段在数据库中是没有的,但是在大多数查询的情况下,都是要用来搜索值,主要是用来前端搜索出传来的值,在ry.js可以发现
     // 查询条件queryParams: function(params) {table.set();var curParams = {// 传递参数查询参数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 在加了该注解就会在以yyyy-MM-dd HH:mm:ss的形式返回给前端

    /** 创建时间 */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date createTime;

Map<String, Object> params;接收post请求传递过来的条件查询params参数,而不需要另外创建Vo。

    private Map<String, Object> params;

如在mapper.xml中进行的切面编程,因为某些场景下需要多表关联进行数据权限的过滤,此时可以用 Map<String, Object> params进行拼接

<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><!-- 数据范围过滤  与注解DataScope相对应-->${params.dataScope}

在DataScopeAspect切面类进行使用,主要是进行权限查询的拼接。因为不同的用户对应得dept和role不同,他们有不同的权限。

若依BaseEntity相关推荐

  1. java baseentity_如何在JPA的BaseEntity中实现equals()和hashcode()方法?

    我有一个BaseEntity类,它是我的应用程序中所有JPA实体的超类. @MappedSuperclass public abstract class BaseEntity implements S ...

  2. 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...

  3. 若依框架使用数据权限

    1.若依架构自带的数据权限为以下几种: 2.再功能模块给用户角色配置对应的数据权限如何让它生效 1)查看自己若依架构的 com.ruoyi.framework.aspectj. DataScopeAs ...

  4. 告别无止境的增删改查:Java代码生成器

    对于一个比较大的业务系统,我们总是无止境的增加,删除,修改,粘贴,复制,想想总让人产生一种抗拒的心里.那有什么办法可以在正常的开发进度下自动生成一些类,配置文件,或者接口呢? 有感于马上要做个比较大的 ...

  5. Spring Boot神操作-多个数据源Service层封装

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:@pdai pdai.tech/md/spring/spri ...

  6. 跟我学Springboot开发后端管理系统3:Mybatis-Plus实战2

    在上一篇文章讲述了如何使用Mybatis-plus自动生成代码,生成的代码具有单表操作数据库的能力,节约了开发时间.然后讲述了如何在Spring Boot中整合Mybatis-Plus.这篇文章讲述如 ...

  7. 跟我学Springboot开发后端管理系统2:Mybatis-Plus实战

    在Matrix-Web项目中使用Mybatis-Plus作为操作数据库的ORM框架.在市面上常用的ORM框架有hibernetes.mybatis.JPA等,那么为什么选择Mybatis-Plus呢? ...

  8. Spring Boot骚操作-多数据源Service层封装

    原文:https://www.pdai.tech/md/spring/springboot-data-multi.html mysql, es, mongodb 三个数据源用配置文件方式连接,JPA只 ...

  9. DDD分层架构最佳实践

    还在单体应用的时候就是分层架构一说,我们用得最多的就是三层架构.而现在已经是微服务时代,在微服务架构模型比较常用的有几个,例如:整洁架构,CQRS(命令查询分离)以及六边形架构.每种架构模型都有自己的 ...

  10. @CreatedDate@CreatedBy@LastModifiedBy@LastModifiedDate

    实体类,注意需要加上@EntityListeners(AuditingEntityListener.class)这个注解才能使@CreatedDate@LastModifiedDate生效 packa ...

最新文章

  1. web.xml配置说明
  2. 实现Evernote的OAuth授权
  3. easyui 修改单元格内容_初学Excel办公软件快速修改文字的方法
  4. ajax 进度条 php,php – Jquery :: Ajax提供进度条?
  5. docker 学习笔记一(教程) 快速上手
  6. 【JAVA源码分析——Java.lang】String源码分析
  7. 8.TCP/IP 详解卷1 --- Traceroute 程序
  8. a4b5笔记本大小对比_2L大小的迷你电脑上班拎着走
  9. python爬取京东书籍_利用Python爬取当当、京东、亚马逊图书信息代码实例源码
  10. python爬取豆瓣Top250-改进版
  11. linux安装红警教程,红警2任务安装教程_红色警戒2任务安装方法一览
  12. excel文件因服务器未响应无法打开,excel打开显示兼容模式(未响应)
  13. 好好说话之hijack GOT
  14. 皮尔森相关系数的python实现_深入理解皮尔逊相关系数python代码
  15. 绕过SSL双向校验抓取Soul App的数据包
  16. 【RL从入门到放弃】【二 表格型RL】
  17. bWAPP靶场漏洞环境搭建Docker版
  18. Java页面跳转失效_求助各位java大神,为什么表单提交之后跳转页面失灵
  19. 【project 】软件使用
  20. 记一次线上JVM原生系统内存泄露排查

热门文章

  1. mcinabox运行库下载安装_mcinabox运行库下载
  2. 服务器计算机性能测试,服务器平台计算性能工具Linpack服务器性能测试利器_一_.pdf...
  3. python 华泰股票交易接口_TradeApi 自带资金管理的A股程序化交易接口
  4. c语言kill暂停和恢复进程,Linux暂停和恢复进程
  5. 【DP SDOI2008 BZOJ 2037】Sue的小球
  6. 计算机学院三行情书,【计算机·头条】“当你老了”三行情书颁奖晚会
  7. CTF新手抓包找flag
  8. 电脑中病毒所有html文件,文件夹全部变成exe文件该怎么办?电脑中了kiss病毒的两种解决办法...
  9. 2019.02.28 bzoj4199: [Noi2015]品酒大会(sam+线段树)
  10. STM32LL库使用——SPI通信