mybatis-plus 查询时排除字段方法的两种方法

 更新时间:2023年09月04日 10:13:51   作者:lin000_0  
我们在开发应用时,在某些应用场景下查询有时需要排除某些字段,本文主要介绍了两种方法,具有一定的参考价值,感兴趣的可以了解一下

我们在开发应用时,在某些应用场景下查询有时需要排除某些字段,mybatis-plus主要提供了以下两种方式

1.通过@TableField()

1.1准备User类

@Data
public class User extends Model<User> {
private Long id;
private String name;
private Integer age;
private String email;
@TableField(exist = false)
private int deleted;
}

1.2 测试方法

@Test
public void testQueryPage(){
QueryWrapper<User> wrapper= new QueryWrapper<User>();
wrapper.ne("age",200) ;
Page<User> page= new Page<User>(6,20,true);
IPage<User> iPage= userMapper.selectPage(page,wrapper);
System.out.println("总页数:"+iPage.getPages()+",总记录数:"+iPage.getTotal()+",当前页:"+iPage.getCurrent());
List<User> users= iPage.getRecords();
users.forEach(System.out::println);
}

1.3测试结果

2022-10-10 11:18:10.901 DEBUG 23728 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Preparing: SELECT id,name,age,email FROM user WHERE (age <> ?) LIMIT ?,?

2022-10-10 11:18:10.901 DEBUG 23728 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Parameters: 200(Integer), 100(Long), 20(Long)

2022-10-10 11:18:10.911 DEBUG 23728 --- [ main] c.m.s.mapper.UserMapper.selectPage : <== Total: 14

2.通过querywrapper中的select方法来排除

2.1.具体方法内容:

public QueryWrapper<T> select(Class<T> entityClass, Predicate<TableFieldInfo> predicate) {
super.setEntityClass(entityClass);
this.sqlSelect.setStringValue(TableInfoHelper.getTableInfo(this.getEntityClass()).chooseSelect(predicate));
return (QueryWrapper)this.typedThis;
}

2.2.这里的Predicate接口有一个关键方法,也就意味着test方法返回ture才会展现这个

/**
* Evaluates this predicate on the given argument.
*
* @param t the input argument
* @return {@code true} if the input argument matches the predicate,
* otherwise {@code false}
*/
boolean test(T t);

下面我们来按排这个方法来准备

2.3 准备User类

@Data
public class User extends Model<User> {
private Long id;
private String name;
private Integer age;
private String email;
private int deleted;
}

2.4 准备测方法

@Test
public void testQueryPage(){
QueryWrapper<User> wrapper= new QueryWrapper<User>();
wrapper.ne("age",200).select(User.class,info -> !info.getColumn().equals("deleted"));
Page<User> page= new Page<User>(6,20,true);
IPage<User> iPage= userMapper.selectPage(page,wrapper);
System.out.println("总页数:"+iPage.getPages()+",总记录数:"+iPage.getTotal()+",当前页:"+iPage.getCurrent());
List<User> users= iPage.getRecords();
users.forEach(System.out::println);
}

2.5运行log

2022-10-10 11:22:04.720 DEBUG 20580 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : ==> Preparing: SELECT COUNT(*) AS total FROM user WHERE deleted = 0 AND (age <> ?)

2022-10-10 11:22:04.750 DEBUG 20580 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : ==> Parameters: 200(Integer)

2022-10-10 11:22:04.780 DEBUG 20580 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : <== Total: 1

2022-10-10 11:22:04.791 DEBUG 20580 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Preparing: SELECT id,name,age,email FROM user WHERE deleted=0 AND (age <> ?) LIMIT ?,?

2022-10-10 11:22:04.792 DEBUG 20580 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Parameters: 200(Integer), 100(Long), 20(Long)

2022-10-10 11:22:04.796 DEBUG 20580 --- [ main] c.m.s.mapper.UserMapper.selectPage : <== Total: 13

总页数:6,总记录数:113,当前页:6

User(id=197, name=zouli197, age=227, email=zoulinlin197@163.com, deleted=0)

User(id=198, name=zouli198, age=228, email=zoulinlin198@163.com, deleted=0)

User(id=199, name=zouli199, age=229, email=zoulinlin199@163.com, deleted=0)

User(id=310, name=zouli10, age=40, email=zoulinlin10@163.com, deleted=0)

如果没有按照上面说明的方式来进行,正常测试log会有deleted字段查询

2022-10-10 11:24:33.069 DEBUG 18760 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : ==> Preparing: SELECT COUNT(*) AS total FROM user WHERE deleted = 0 AND (age <> ?)

2022-10-10 11:24:33.089 DEBUG 18760 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : ==> Parameters: 200(Integer)

2022-10-10 11:24:33.119 DEBUG 18760 --- [ main] c.m.s.m.UserMapper.selectPage_mpCount : <== Total: 1

2022-10-10 11:24:33.129 DEBUG 18760 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Preparing: SELECT id,name,age,email,deleted FROM user WHERE deleted=0 AND (age <> ?) LIMIT ?,?

2022-10-10 11:24:33.129 DEBUG 18760 --- [ main] c.m.s.mapper.UserMapper.selectPage : ==> Parameters: 200(Integer), 100(Long), 20(Long)

2022-10-10 11:24:33.129 DEBUG 18760 --- [ main] c.m.s.mapper.UserMapper.selectPage : <== Total: 13

总页数:6,总记录数:113,当前页:6

User(id=197, name=zouli197, age=227, email=zoulinlin197@163.com, deleted=0)

 到此这篇关于mybatis-plus 查询时排除字段方法的两种方法的文章就介绍到这了,更多相关mybatis-plus 查询排除字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • win10 eclipse配置环境变量的教程图解

    win10 eclipse配置环境变量的教程图解

    本文通过图文并茂的形式给大家介绍了win10 eclipse配置环境变量的方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2018-07-07
  • Java实现Kafka生产者消费者代码实例

    Java实现Kafka生产者消费者代码实例

    这篇文章主要介绍了Java实现Kafka生产者消费者代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • springboot打包jar和war包的教程图解

    springboot打包jar和war包的教程图解

    这篇文章主要介绍了springboot打包jar和war包的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • Java邮件发送程序(可以同时发给多个地址、可以带附件)

    Java邮件发送程序(可以同时发给多个地址、可以带附件)

    不错的功能比较齐全的邮件发送程序源码
    2008-07-07
  • Spring在代码中获取bean的几种方式详解

    Spring在代码中获取bean的几种方式详解

    这篇文章主要介绍了Spring在代码中获取bean的几种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Spring6整合JUnit的详细步骤

    Spring6整合JUnit的详细步骤

    这篇文章主要介绍了Spring6整合JUnit的详细步骤,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • 一文详细springboot实现MySQL数据库的整合步骤

    一文详细springboot实现MySQL数据库的整合步骤

    Spring Boot可以很方便地与MySQL数据库进行整合,下面这篇文章主要给大家介绍了关于springboot实现MySQL数据库的整合步骤,文中通过图文以及代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Java轻松生成5位随机数

    Java轻松生成5位随机数

    这篇文章主要介绍了Java轻松生成5位随机数的相关资料,需要的朋友可以参考下
    2023-10-10
  • JDK源码之Vector与HashSet解析

    JDK源码之Vector与HashSet解析

    HashSet、HashMap、ArrayList、LinkedList、Vector这几个在Java编程中经常用到,他们之间有很多联系,有很多相通的地方,我们这次先了解一下Vector与HashSet
    2021-06-06
  • java 动态代理的方法总结

    java 动态代理的方法总结

    这篇文章主要介绍了java 动态代理的方法总结的相关资料,需要的朋友可以参考下
    2017-04-04

最新评论