mybatis-plus 返回部分字段的解决方式
作者:别问问就是报错 发布时间:2023-03-25 14:45:04
标签:mybatis-plus,返回,字段
mybatis-plus的代码生成器会在实体类中生成数据库所有字段,我们去用mapper接口查询时,会返回数据库所有的字段。
但有些字段不是我们想要的,比如:deleted,所以我们可以在不需要的字段上面加@JsonIgnore注解,返回给前端的时候会自动把这个字段去除。
补充知识:Mybatis-Plus只查询特定字段与创建子类方法
Mybatis-Plus查询特定字段例子:
Seal seal = sealService.selectOne(
new EntityWrapper<Seal>().setSqlSelect("sealName").eq("sealId",auditProcess.getSealId()));
其中这里的seal是一个自定义类。"sealName"是数据库表seal的一个字段,这句查询只查到id为 auditProcess.getSealId() 的seal的名称。其余字段为null
创建子类方法。
一般需要联表的情况,又不想写sql语句,可以试下这种方法(至于效率,我也没有测试过)
上个例子
Manager类
/**
* <p>
*
* </p>
*
* @author onee123
* @since 2019-03-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_manager")
public class Manager extends Model<Manager> {
private static final long serialVersionUID = 1L;
/**
* 管理员id
*/
@TableId(value = "manager_id",type = IdType.UUID)
private String managerId;
/**
* 账号
*/
@TableField("manager_phone")
private String managerPhone;
/**
* 密码
*/
@TableField("manager_pass")
private String managerPass;
/**
* 姓名
*/
@TableField("manager_name")
private String managerName;
/**
* 邮箱
*/
@TableField("manager_email")
private String managerEmail;
/**
* 状态(0:1-删除:启动)
*/
@TableField("manager_status")
private Integer managerStatus;
/**
* 权限id
*/
@TableField("role_id")
private String roleId;
/**
* 部门
*/
@TableField("manager_department")
private String managerDepartment;
/**
* 创建时间
*/
@TableField("manager_create_time")
private Date managerCreateTime;
/**
* 最近登陆时间
*/
@TableField("manager_login_time")
private Date managerLoginTime;
@Override
protected Serializable pkVal() {
return this.managerId;
}
}
Seal类
/**
* <p>
*
* </p>
*
* @author wihenne123
* @since 2020-04-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_seal")
public class Seal extends Model<Seal> {
private static final long serialVersionUID = 1L;
/**
* 印章id
*/
@TableId(value="seal_id",type = IdType.UUID)
private String sealId;
/**
* 印章名
*/
@TableField("seal_name")
private String sealName;
/**
* 图片路径
*/
@TableField("picture_path")
private String picturePath;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
/**
* 更新时间
*/
@TableField("update_time")
private Date updateTime;
/**
* (-1:0:1 - 删除:停用:启用)
*/
@TableField("seal_status")
private Integer sealStatus;
@Override
protected Serializable pkVal() {
return this.sealId;
}
}
AuditProcess类,其中managerId和sealId需要对应上面两个表。
/**
* <p>
*
* </p>
*
* @author wihenne123
* @since 2020-04-24
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("_audit_process")
public class AuditProcess extends Model<AuditProcess> {
private static final long serialVersionUID = 1L;
/**
* 流程图id
*/
@TableId(value = "audit_id", type = IdType.AUTO)
private Integer auditId;
/**
* 流程名称
*/
@TableField("audit_name")
private String auditName;
/**
* 审核顺序(,隔开-店长用shopManager表示)
*/
@TableField("audit_sort")
private String auditSort;
/**
* 状态(-1:0:1-删除:停用:启用)
*/
@TableField("audit_status")
private Integer auditStatus;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
/**
* 更新时间
*/
@TableField("update_time")
private Date updateTime;
/**
* 印章id(无则为0)
*/
@TableField("seal_id")
private String sealId;
/**
* 创建人id
*/
@TableField("manager_id")
private String managerId;
/**
* 印章x位置
*/
@TableField("seal_x")
private Double sealX;
/**
* 印章y位置
*/
@TableField("seal_y")
private Double sealY;
/**
* 印章大小
*/
@TableField("seal_size")
private Double sealSize;
/**
* 印章所在页码
*/
@TableField("seal_page")
private Integer sealPage;
/**
* 序号x位置
*/
@TableField("num_x")
private Double numX;
/**
* 序号y位置
*/
@TableField("num_y")
private Double numY;
/**
* 序号大小
*/
@TableField("num_size")
private Double numSize;
/**
* 序号所在页码
*/
@TableField("num_page")
private Integer numPage;
/**
* pdf文件demo路径
*/
@TableField("pdf_demo_path")
private String pdfDemoPath;
/**
* 反馈文件路径
*/
@TableField("result_file_path")
private String resultFilePath;
/**
* 最大打印次数
*/
@TableField("print_size")
private Integer printSize;
@Override
protected Serializable pkVal() {
return this.auditId;
}
}
这时候我只需要对应id的类的名称,所以我设置了vo类作为子类
然后在接口里面写转换方法
/**
* <p>
* 服务实现类
* </p>
*
* @author wihenne123
* @since 2020-04-23
*/
@Service
public class AuditProcessServiceImpl extends ServiceImpl<AuditProcessMapper, AuditProcess> implements AuditProcessService {
@Autowired
ManagerService managerService;
@Autowired
SealService sealService;
@Autowired
AuditProcessService auditProcessService;
@Override
public List<AuditProcessVo> auditProcessToVo(List<AuditProcess> auditProcessList) {
List<AuditProcessVo> auditProcessVos = new ArrayList<>();
for(AuditProcess auditProcess:auditProcessList){
//遍历list
auditProcessVos.add(auditProcessToVo(auditProcess));
}
return auditProcessVos;
}
@Override
public AuditProcessVo auditProcessToVo(AuditProcess auditProcess) {
AuditProcessVo auditProcessVo = new AuditProcessVo();
BeanUtils.copyProperties(auditProcess,auditProcessVo); //复制进vo类
Manager manager = managerService.selectOne(
new EntityWrapper<Manager>().setSqlSelect("manager_name","manager_department").eq("manager_id",auditProcess.getManagerId()));
//加入字段值
auditProcessVo.setManagerName(manager.getManagerName());
auditProcessVo.setManagerDepartment(manager.getManagerDepartment());
if(auditProcess.getSealId() != null){
Seal seal = sealService.selectOne(
new EntityWrapper<Seal>().setSqlSelect("seal_name").eq("seal_id",auditProcess.getSealId()));
if(seal != null){
auditProcessVo.setSealName(seal.getSealName());
}
}else {
auditProcessVo.setSealName("无");
}
return auditProcessVo;
}
}
再想调用时直接调用就可以了
来源:https://blog.csdn.net/weixin_43358430/article/details/103734104


猜你喜欢
- 一、为什么要有泛型?我们在写一些方法时可能会方法名相同,参数类型不同的方法,这种叫做重载。如果只是因为参数类型不同里面做的业务逻辑都是相同的
- Java 8新特性方法引用对于引用来说我们一般都是用在对象,而对象引用的特点是:不同的引用对象可以操作同一块内容!Java 8的方法引用定义
- 先讲一下java中的反射:反射就是将类别的各个组成部分进行剖析,可以得到每个组成部分,就可以对每一部分进行操作反射机制应用场景:逆向代码、动
- Jackson 日期格式化技巧使用 Spring Boot 时,需要使用 Jackson 处理一些 Java Time API 类型的 JS
- 本文实例讲述了C#实现对Json字符串处理方法,分享给大家供大家参考。具体分析如下:一般对于web应用开发人员来说对Json字符串都会很熟悉
- 概述在Compose中,图片组件主要有两种,分别是显示图标的Icon组件和显示图片的Image组件,当我们显示一系列的小图标的时候,我们可以
- 本系列代码地址:https://github.com/JoJoTec/spring-cloud-parentOpenFeign 的由来和实现
- 文档中添加印章可以起一定的作用,比如,防止文件随意被使用,或者确保文档内容的安全性和权威性。C#添加图片印章其实也有很多实现方法,这里我使用
- 先直接看看效果吧初始情况 点击一个作为标记 再次点击后删除 3.这里还要感谢前辈的代码作为参考,毕竟以前也没有写过关于日历方面的东西,别人确
- 1.简介建议阅读本文最好对Dokcer有一些了解首先我们先了解一下Docker是什么Docker 属于 Linux 容器的一种封装,提供简单
- 本文实例讲述了C#使用HtmlAgilityPack抓取糗事百科内容的方法。分享给大家供大家参考。具体实现方法如下:Console.Writ
- 本文实例为大家分享了C语言实现通讯管理系统的具体代码,供大家参考,具体内容如下#include<stdio.h>#include
- 一.应用场景平时在建对象表的时候都会有最后修改时间,最后修改人这两个字段,对于这些大部分表都有的字段,每次在新增和修改的时候都要考虑到这几个
- 1,什么是Eureka,什么是服务注册与发现 Spring Boot作为目前最火爆的web框架。那么它与Eureka又有什么关联呢?Eure
- 本文实例分析了C#中Action和Func的区别,有助于读者牢固掌握并对其准确使用。具体分析如下:先来看下面这段代码://测试使用的公共值i
- 问题描述在进行flutter项目开发时,我们常常会碰见我们在执行flutter run指令的情况下,出现资源下载过慢的问题,最终导致下载失败
- Android使用RecyclerView1. 什么是RecyclerViewRecyclerView 是 Android-support-
- Linux下JDK安装教程,具体内容如下1、下载 JDK Linux 版本(注意看自己安装 Linux 系统的位数)oracle 官网下载地
- 本文实例为大家分享了C#实现学生成绩管理系统的具体代码,供大家参考,具体内容如下使用链表写学生成绩管理系统链表可以灵活的展示增删改查下面是结
- 这篇文章主要介绍了Java CPU性能分析工具代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋