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;
  }
}

再想调用时直接调用就可以了

以上这篇mybatis-plus 返回部分字段的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • mybatis升级mybatis-plus时踩到的一些坑

    前言 最近使用RuoYi-Vue来做后台管理脚手架.RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot.Spring Security.MyBatis.Jwt.Vue),内置模块如:部门管理.角色用户.菜单及按钮授权.数据权限.系统参数.日志管理.代码生成等.在线定时任务配置:支持集群,支持多数据源.其官方文档如下 http://doc.ruoyi.vip/ 感兴趣的朋友,可以点链接查看.这个平台目前的orm框架是mybatis,而项目组的o

  • 完美解决MybatisPlus插件分页查询不起作用总是查询全部数据问题

    问题描述: 在使用mybatisplus插件进行分页查询时分页参数不起作用,总是查出来全部数据. 原因分析: 查看打印的sql日志发现sql后面并没有limit条件,怀疑是缺少配置. 解决方案: 查阅资料通过添加配置类MybatisPlusConfig解决问题: @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ return new

  • Mybatis多个字段模糊匹配同一个值的案例

    需求: 搜索框中可输入手机号,姓名,地址查询,后台需要对一个框中的多个字段做匹配查询. 搜索 可以在sql语句中做拼接条件查询: <if test="condition!=null and condition!=''"> AND CONCAT(r.name,a.name,a.phone,a.addr_detail) LIKE '%' #{condition} '%' </if> 补充知识:在Mybatis xml使用mysql数据库进行多字段模糊查询(Like)

  • mybatis-plus 返回部分字段的解决方式

    mybatis-plus的代码生成器会在实体类中生成数据库所有字段,我们去用mapper接口查询时,会返回数据库所有的字段. 但有些字段不是我们想要的,比如:deleted,所以我们可以在不需要的字段上面加@JsonIgnore注解,返回给前端的时候会自动把这个字段去除. 补充知识:Mybatis-Plus只查询特定字段与创建子类方法 Mybatis-Plus查询特定字段例子: Seal seal = sealService.selectOne( new EntityWrapper<Seal>

  • 解决mybatis使用char类型字段查询oracle数据库时结果返回null问题

    同事在学mybatis时,遇到了一个问题就是,使用char类型字段作为查询条件时一直都查不出数据,其他类型的则可以. 使用的数据库是oracle,查询条件字段类型是char(50),java代码对应的是String类型. 后来经过排查,是由于在oracle中,char类型字段,如果内容长度不够,会自动以空格方式补足长度.如字段 name char(5),若值为sgl,那么oracle会自动用空格补足长度,最终值为sgl. 一.解决方法: 方法1:先用trim()函数把值去掉两边空格再作为条件查询

  • 解决mybatis用Map返回的字段全变大写的问题

    mybatis通常情况都是用javabean作为resultType的对象,但是有时也可以使用Map去接收. <select id="execute" parameterType="String" resultType="java.util.HashMap"> ${value} </select> 如果使用Map,返回来的字段名全是大写,处理方法 Select name as "name" from v

  • mybatis中orderBy(排序字段)和sort(排序方式)引起的bug及解决

    目录 引言 问题叙述 下面尝试采用第二种方式 第三种方式 3.1 首先是什么都不传 3.2 传入排序字段oderBy 引言 记录一个mybatis实现动态字段的排序和动态的升降序问题 实现效果如下: 问题叙述 在这里无论使用postman是否传递sort的值, 都不生效, postman 执行的sql日志 ==>  Preparing: select sum(acd.read_view_count) as read_view_count,sum(acd.read_person_count) as

  • MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题

    在项目开发中,我们经常会遇到表中的字段名和表对应实体类的属性名称不一定都是完全相同的情况,下面小编给大家演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突问题,感兴趣的朋友一起学习吧. 一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, or

  • Mybatis插入时返回自增主键方式(selectKey和useGeneratedKeys)

    目录 Mybatis插入时返回自增主键 Mybatis批量插入返回自增主键 解决办法 Mybatis插入时返回自增主键 通过selectKey在插入操作前或者操作后获取key值,做为字段插入或返回字段.(此段代码获取的序列值id作为字段值插入到实体类中返回) <insert id="insert"> <selectKey keyProperty="id" resultType="int" order="AFTER&qu

  • 解决mybatis update并非所有字段需要更新问题

    目录 mybatis update并非所有字段需要更新 解决办法 mybatis update时遇到的问题 mybatis update并非所有字段需要更新 mybatis update 需求:更新字段作为参数,未更新字段不传入 解决办法 <update id="updateUser" parameterType="com.test.entity.User"> update BS_USER <trim prefix="set"

  • Thinkphp 在api开发中异常返回依然是html的解决方式

    现在谁不开发接口的呢?但是在接口开发过程中,报错误异常后居然返回错误的信息依然是html信息!TP官方也不知道为啥不添加,说好的为接口而生,我的解决方案也很简单,把系统的异常处理类复制出来,去掉模板相关,直接以json方式输出 下面是解决方案: 1:按照TP扩展异常的方式引用这个文件 https://www.kancloud.cn/manual/thinkphp5_1/354092 // 判断默认输出类型 // $app 是配置数组 if ($app['default_return_type']

  • python mysql 字段与关键字冲突的解决方式

    解决方法:python中把字段名称用反引号(`),也就是ESC下面~那个按钮. 示例: 数据字段设计如下截图所示 待插入数据: datas = { 'sign_event':[ {'id': 1, 'name': '华为mate9发布会' , 'limit': 100, 'status': 1, 'address': '会展中心1号厅', 'start_time': '2017-09-20 14:00:00','create_time':'2017-08-20 14:00:00'}, {'id'

  • 解析Mybatis的insert方法返回数字-2147482646的解决

    前言:前几天在做项目demo的时候,发现有一个很奇怪的现象,就是MyBatis发现更新和插入返回值一直为"-2147482646".无论怎么改,这个值一直不变...是在摸不着头脑,百度和谷歌了一下,有这样的说法原来是由defaultExecutorType设置引起的,如果设置为BATCH,更新返回值就会丢失. If the BATCH executor is in use, the update counts are being lost. 操作:也就是说在spring的配置文件中,只

随机推荐