若依BaseEntity
一、为什么要使用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相关推荐
- java baseentity_如何在JPA的BaseEntity中实现equals()和hashcode()方法?
我有一个BaseEntity类,它是我的应用程序中所有JPA实体的超类. @MappedSuperclass public abstract class BaseEntity implements S ...
- 从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作
本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本篇主要开始介绍基于XCod ...
- 若依框架使用数据权限
1.若依架构自带的数据权限为以下几种: 2.再功能模块给用户角色配置对应的数据权限如何让它生效 1)查看自己若依架构的 com.ruoyi.framework.aspectj. DataScopeAs ...
- 告别无止境的增删改查:Java代码生成器
对于一个比较大的业务系统,我们总是无止境的增加,删除,修改,粘贴,复制,想想总让人产生一种抗拒的心里.那有什么办法可以在正常的开发进度下自动生成一些类,配置文件,或者接口呢? 有感于马上要做个比较大的 ...
- Spring Boot神操作-多个数据源Service层封装
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:@pdai pdai.tech/md/spring/spri ...
- 跟我学Springboot开发后端管理系统3:Mybatis-Plus实战2
在上一篇文章讲述了如何使用Mybatis-plus自动生成代码,生成的代码具有单表操作数据库的能力,节约了开发时间.然后讲述了如何在Spring Boot中整合Mybatis-Plus.这篇文章讲述如 ...
- 跟我学Springboot开发后端管理系统2:Mybatis-Plus实战
在Matrix-Web项目中使用Mybatis-Plus作为操作数据库的ORM框架.在市面上常用的ORM框架有hibernetes.mybatis.JPA等,那么为什么选择Mybatis-Plus呢? ...
- Spring Boot骚操作-多数据源Service层封装
原文:https://www.pdai.tech/md/spring/springboot-data-multi.html mysql, es, mongodb 三个数据源用配置文件方式连接,JPA只 ...
- DDD分层架构最佳实践
还在单体应用的时候就是分层架构一说,我们用得最多的就是三层架构.而现在已经是微服务时代,在微服务架构模型比较常用的有几个,例如:整洁架构,CQRS(命令查询分离)以及六边形架构.每种架构模型都有自己的 ...
- @CreatedDate@CreatedBy@LastModifiedBy@LastModifiedDate
实体类,注意需要加上@EntityListeners(AuditingEntityListener.class)这个注解才能使@CreatedDate@LastModifiedDate生效 packa ...
最新文章
- web.xml配置说明
- 实现Evernote的OAuth授权
- easyui 修改单元格内容_初学Excel办公软件快速修改文字的方法
- ajax 进度条 php,php – Jquery :: Ajax提供进度条?
- docker 学习笔记一(教程) 快速上手
- 【JAVA源码分析——Java.lang】String源码分析
- 8.TCP/IP 详解卷1 --- Traceroute 程序
- a4b5笔记本大小对比_2L大小的迷你电脑上班拎着走
- python爬取京东书籍_利用Python爬取当当、京东、亚马逊图书信息代码实例源码
- python爬取豆瓣Top250-改进版
- linux安装红警教程,红警2任务安装教程_红色警戒2任务安装方法一览
- excel文件因服务器未响应无法打开,excel打开显示兼容模式(未响应)
- 好好说话之hijack GOT
- 皮尔森相关系数的python实现_深入理解皮尔逊相关系数python代码
- 绕过SSL双向校验抓取Soul App的数据包
- 【RL从入门到放弃】【二 表格型RL】
- bWAPP靶场漏洞环境搭建Docker版
- Java页面跳转失效_求助各位java大神,为什么表单提交之后跳转页面失灵
- 【project 】软件使用
- 记一次线上JVM原生系统内存泄露排查
热门文章
- mcinabox运行库下载安装_mcinabox运行库下载
- 服务器计算机性能测试,服务器平台计算性能工具Linpack服务器性能测试利器_一_.pdf...
- python 华泰股票交易接口_TradeApi 自带资金管理的A股程序化交易接口
- c语言kill暂停和恢复进程,Linux暂停和恢复进程
- 【DP SDOI2008 BZOJ 2037】Sue的小球
- 计算机学院三行情书,【计算机·头条】“当你老了”三行情书颁奖晚会
- CTF新手抓包找flag
- 电脑中病毒所有html文件,文件夹全部变成exe文件该怎么办?电脑中了kiss病毒的两种解决办法...
- 2019.02.28 bzoj4199: [Noi2015]品酒大会(sam+线段树)
- STM32LL库使用——SPI通信