mybatisplus+pgsql查询bug的解决

 更新时间:2023年03月17日 09:59:47   作者:huarui0922  
本文主要介绍了mybatisplus+pgsql查询bug的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近公司把底层数据库,改换成了pgsql,之前一直是用的mysql。可是换了pgsql之后,现在发现跟mybatisplus集成上,居然出现了一些很奇怪的bug。

这是sys_user表,我要根据id查这两条数据,一个id为3,一个id为5

这是4条查询语句,前2条根据id为3的查,后两条根据id为5的查

以下是根据id为3来查,

数据正常查了处理,departmentId也不为空,为啥这里我要提到 departmentId这段,请接着看,

奇怪的事情发生了,当id为5的查询时,数据也查出来了,确实是数据库里的那两条数据,但是

departmentId居然为null,这就很离谱

这是实体:

package com.xmirror.entity.entity.system;
 
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.xmirror.entity.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
 
import java.beans.Transient;
import java.util.*;
 
/**
 * 用户实体
 *
 * @author Wang, Haoyue
 * @since 2020/9/11 2:04 下午
 */
@Data
@TableName("sys_user")
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class User extends BaseEntity implements UserDetails {
 
    /**
     * 用户名
     */
    private String username;
 
    /**
     * 密码
     */
    private String password;
 
    /**
     * 真实姓名
     */
    private String realName;
 
    /**
     * 手机号码
     */
    private String phone;
 
    /**
     * 邮箱
     */
    private String email;
 
    /**
     * 是否启用
     * 0: 不启用
     * 1: 启用
     */
    private Integer status;
 
    /**
     * 部门id
     */
    private Integer departmentId;
 
    /**
     * 授权开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date authStartTime;
 
    /**
     * 授权结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date authEndTime;
 
    /**
     * 登录失败次数
     */
    private Integer loginFailCount;
 
    /**
     * 角色id
     */
    @TableField(exist = false)
    private Integer roleId;
 
    /**
     * 角色名称
     */
    @TableField(exist = false)
    private String roleName;
 
    /**
     * 注册说明
     */
    private String remark;
 
    /**
     * 权限集合
     * 非数据库字段属性
     */
    @TableField(exist = false)
    private List<Permission> authorities;
 
    public User() {
    }
 
    public User(Integer id){
        super.setId(id);
    }
    public User(List<Permission> authorities, User user) {
        this.authorities = authorities;
        super.setId(user.getId());
        super.setModifyDate(user.getModifyDate());
        super.setCreateDate(user.getCreateDate());
        username = user.getUsername();
        password = user.getPassword();
        realName = user.getRealName();
        phone = user.getPhone();
        email = user.getEmail();
        status = user.getStatus();
        departmentId = user.getDepartmentId();
        authStartTime = user.getAuthStartTime();
        authEndTime = user.getAuthEndTime();
    }
 
    @Transient
    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<SimpleGrantedAuthority> auth = new ArrayList<>();
        // 根据Permission生成权限列表
        Optional.ofNullable(authorities)
                .ifPresent(p -> p.forEach(permission -> {
                    auth.add(new SimpleGrantedAuthority(permission.getExpression()));
                }));
        return auth;
    }
 
    @Transient
    @Override
    public boolean isAccountNonExpired() {
        return true;
    }
 
    @Transient
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }
 
    @Transient
    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }
 
    @Transient
    @Override
    public boolean isEnabled() {
        return true;
    }
}

这是表结构

我把sql打印出来,拿来数据库里执行,都是能正常查出来的,说明单独跟pgsql没有关系,估计就是pgsql跟mybatisplus集成上的问题。而且也只有这一个字段出不来,并且也不是每条数据的这个字段出不来。

真是百思不得其解,都后悔用这pgsql这玩意儿了,不知道有朋友遇到过这种奇怪问题没有

到此这篇关于mybatisplus+pgsql查询bug的解决的文章就介绍到这了,更多相关mybatisplus pgsql查询bug内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java面向对象编程之继承和多态以及包的解析与使用范例

    Java面向对象编程之继承和多态以及包的解析与使用范例

    继承就是可以直接使用前辈的属性和方法。自然界如果没有继承,那一切都是处于混沌状态。多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作
    2021-11-11
  • Spring Boot中的WebSocketMessageBrokerConfigurer接口使用

    Spring Boot中的WebSocketMessageBrokerConfigurer接口使用

    在SpringBoot中,我们可以使用 WebSocketMessageBrokerConfigurer接口来配置WebSocket消息代理,以实现实时通信,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • Java如何使用spire进行word文档的替换详解

    Java如何使用spire进行word文档的替换详解

    创作一份文案经常会高频率地使用某些词汇,如地名、人名、人物职位等,若表述有误,就需要整体撤换,下面这篇文章主要给大家介绍了关于Java如何使用spire进行word文档的替换的相关资料,需要的朋友可以参考下
    2023-01-01
  • java字符串的截取方法substring()代码解析

    java字符串的截取方法substring()代码解析

    这篇文章主要介绍了java字符串的截取方法substring()代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • 使用springBoot中的info等级通过druid打印sql

    使用springBoot中的info等级通过druid打印sql

    这篇文章主要介绍了使用springBoot中的info等级通过druid打印sql,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring框架 注解配置事务控制的流程

    Spring框架 注解配置事务控制的流程

    这篇文章主要介绍了Spring框架 注解配置事务控制的流程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring Boot实现配置文件的自动加载和刷新功能

    Spring Boot实现配置文件的自动加载和刷新功能

    这篇文章我们介绍了Spring Boot如何实现配置文件的自动加载和刷新,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-05-05
  • Java语言实现最大堆代码示例

    Java语言实现最大堆代码示例

    这篇文章主要介绍了Java语言实现最大堆代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-12-12
  • Java 数组ArrayList常用语法详解

    Java 数组ArrayList常用语法详解

    这篇文章主要介绍了Java 数组ArrayList常用语法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Java实现堆算法的使用示例

    Java实现堆算法的使用示例

    本文主要介绍了Java实现堆算法的使用示例,Java中提供了一个Heap类,可以用来实现堆的操作,可以实现如插入、删除、获取最大最小值等,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12

最新评论