Mybatis-Plus select不去查全部字段和去重问题

 更新时间:2026年04月24日 09:15:49   作者:赵广陆  
本文介绍了MyBatis-Plus中查询指定字段的方法和查询分组查询的方法,还介绍了使用`queryWrapper`的的`select()`方法来指定查询的字段,并并并并提供了查询去重;IN操作和特殊字符转义的示例代码

1、mybatis-plus select查询语句默认是查全部字段

有两种方法可以指定要查询的字段

CREATE TABLE `user` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `name` varchar(30) DEFAULT NULL COMMENT '姓名',
  `age` int(11) DEFAULT NULL COMMENT '年龄',
  `email` varchar(50) DEFAULT NULL COMMENT '邮箱',
  `manager_id` bigint(20) DEFAULT NULL COMMENT '直属上级id',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `manager_fk` (`manager_id`),
  CONSTRAINT `manager_fk` FOREIGN KEY (`manager_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1、user表只需要查询出name和age两个字段的数据,可以使用queryWrapper的select()方法指定要查询的字段

    @Test
    public void selectByWrapper10() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select("name", "age").like("name", "雨");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

日志输出sql:

DEBUG==> Preparing: SELECT name,age FROM user WHERE name LIKE ?
DEBUG==> Parameters: %雨%(String)
TRACE<== Columns: name, age
TRACE<== Row: 张雨琪, 31
TRACE<== Row: 刘红雨, 31
DEBUG<== Total: 2

2、user表要查询出除manager_id和create_time外其它所有字段的数据,同样也是使用queryWrapper的select()方法

    @Test
    public void selectByWrapper11() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.select(User.class, info -> !info.getColumn().equals("manager_id")
                && !info.getColumn().equals("create_time"));
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

日志输出sql:

DEBUG==> Preparing: SELECT id,name,age,email FROM user
DEBUG==> Parameters:
TRACE<== Columns: id, name, age, email
TRACE<== Row: 1087982257332887553, 大boss, 40, boss@baomidou.com
TRACE<== Row: 1088248166370832385, 王天风, 25, wtf@baomidou.com
TRACE<== Row: 1088250446457389058, 李艺伟, 28, lyw@baomidou.com
TRACE<== Row: 1094590409767661570, 张雨琪, 31, zjq@baomidou.com
TRACE<== Row: 1094592041087729666, 刘红雨, 31, lhm@baomidou.com
DEBUG<== Total: 5

2、Mybatis plus实现Distinct去重功能

可以使用mybatis自带的语法,去重的话也可以进行分组查询,或者让java处理的set方法

	QueryWrapper queryWrapper = new QueryWrapper();
	queryWrapper.select("DISTINCT no,type").orderByAsc("oldlu");
	return mapper.selectList(queryWrapper);

查询出后的结果输出类型,可以参考如下:

	QueryWrapper<User> queryWrapper = new QueryWrapper<>();
	queryWrapper.select("DISTINCT no,type").orderByAsc("oldlu");
	return mapper.selectList(queryWrapper);

3、Mybatis plus实现in操作

如果是List类型的String,例如:List这种类型的,就直接放值就可以了,本文讲的是当你查询到的是一个list集合如何遍历取值,否则要写sql和接口就显得很麻烦。

步骤如下:

//查询到list集合
List<User> userList = userService.selectById(id);
//结果集
List<String> resultList = new ArrayList<>();
//遍历集合取值
 userList .forEach(item->{
      resultList.add(item.getYouNeedId());
 });
 //条件构造器in上手使用
 QueryWrapper<User> qw = new QueryWrapper<>();
 qw.in("you_need_id", resultList);
 //这里有个分页的查询,你也可以不用分页,用mybatisplus里面封装的其他方法
 IPage<User> userIPage = userMapper.selectPage(page, qw);
 //返回查询结果,getRecords也是mybatisplus里面封装的方法
 return contractRecordIPage.getRecords();

4、mybatis 转义对照表

这种问题在xml处理sql的程序中经常需要我们来进行特殊处理。

​其实很简单,我们只需作如下替换即可避免上述的错误:

<<=>>=&"
<<=>>=&'"

不多说话,代码表示。

<!-- 分页查询-->
<select id="getKaoShiPageList" resultMap="kaoShiBean" parameterType="com.example.demo.kaoshi.beans.kaoShiBean">
    select * from tb_pxks_kaoshi
    <where>
        <if test="zy !=null and zy!= ''">
            and zy='${zy}'
        </if>
        <if test="ksrqFrom !=null and ksrqFrom!= ''">
            and ksrq >='${ksrqFrom}'
        </if>
        <if test="ksrqTo !=null and ksrqTo!= ''">
            and ksrq <='${ksrqTo}'
        </if>
    </where>
    order  by ksrq desc

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Struts2开发环境搭建 附简单登录功能实例

    Struts2开发环境搭建 附简单登录功能实例

    这篇文章主要介绍了Struts2开发环境搭建,为大家分享一个简单登录功能实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Spring Boot JPA Repository之existsBy查询方法失效的解决

    Spring Boot JPA Repository之existsBy查询方法失效的解决

    这篇文章主要介绍了Spring Boot JPA Repository之existsBy查询方法失效的解决方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Spring cloud oauth2如何搭建认证资源中心

    Spring cloud oauth2如何搭建认证资源中心

    这篇文章主要介绍了Spring cloud oauth2如何搭建认证资源中心,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • java如何将list按照指定数量分成小list

    java如何将list按照指定数量分成小list

    本文介绍了四种不同的方法对集合进行分区操作,包括手动编写代码、使用Guava库、Apache Commons Collection库以及Java 8的流操作,每种方法都有其特点和适用场景,需要注意的是,部分方法返回的是原集合的视图,而部分则返回的是新的集合
    2024-11-11
  • Java数组集合的深度复制代码实例

    Java数组集合的深度复制代码实例

    这篇文章主要介绍了Java数组集合的深度复制代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java实现斗地主案例

    Java实现斗地主案例

    这篇文章主要为大家详细介绍了Java实现斗地主案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • JDK(免安装)各种版本下载及配置详细图文教程

    JDK(免安装)各种版本下载及配置详细图文教程

    这篇文章主要给大家介绍了关于JDK(免安装)各种版本下载及配置的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-07-07
  • Java系统升级与迁移的完整指南

    Java系统升级与迁移的完整指南

    在Java生态中,系统升级和迁移是开发者必须面对的“成人礼”,从JAR地狱到模块化战争,从Java 8到Java 17的版本跳跃,每一次升级都伴随着技术债的清算、架构的重构和性能的飞跃,所以本文给大家介绍了Java系统升级与迁移的完整指南,需要的朋友可以参考下
    2025-08-08
  • 理解Java面向对象编程设计

    理解Java面向对象编程设计

    这篇文章主要介绍了理解Java面向对象编程设计,面向对象编程是一种编程思维方式和编码架构。下面详细内容,需要的小伙伴可以参考一下
    2022-01-01
  • java多线程中的生产者和消费者队列详解

    java多线程中的生产者和消费者队列详解

    这篇文章主要介绍了java多线程中的生产者和消费者队列详解,队列,是一种数据结构,除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的,需要的朋友可以参考下
    2024-01-01

最新评论