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

简介: Mybatis-Plus select不去查全部字段和去重

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 &gt;='${ksrqFrom}'
        </if>
        <if test="ksrqTo !=null and ksrqTo!= ''">
            and ksrq &lt;='${ksrqTo}'
        </if>
    </where>
    order  by ksrq desc



目录
相关文章
|
9月前
|
SQL XML Java
【mybatis】第二篇:@Select注解中加入字段判断
【mybatis】第二篇:@Select注解中加入字段判断
|
5月前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
377 8
|
1月前
|
SQL Java 数据库连接
Mybatis拦截器实现公共字段填充
通过使用MyBatis拦截器,可以实现对公共字段的自动填充,简化代码,提高开发效率。拦截器通过拦截SQL操作,在插入和更新操作时自动填充公共字段,使得开发者不再需要手动设置这些字段。本文详细介绍了实现步骤,并通过示例代码展示了具体实现方法,希望能为您的开发工作提供实用的指导和帮助。
73 13
|
3月前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
4月前
|
SQL Java 数据库连接
mybatis如何仅仅查询某个表的几个字段
【10月更文挑战第19天】mybatis如何仅仅查询某个表的几个字段
151 1
|
4月前
|
SQL Java 数据库连接
Mybatis入门(select标签)
这篇文章介绍了Mybatis中`select`标签的基本用法及其相关属性,并通过示例展示了如何配置和执行SQL查询语句。
86 0
Mybatis入门(select标签)
|
5月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
95 1
|
7月前
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
85 7
|
7月前
|
数据库
MybatisPlus3---常用注解,驼峰转下滑线作为表明 cteateTime 数据表中的 cteate_time,@TableField,与数据库字段冲突要使用转义字符“`order`“,is
MybatisPlus3---常用注解,驼峰转下滑线作为表明 cteateTime 数据表中的 cteate_time,@TableField,与数据库字段冲突要使用转义字符“`order`“,is
|
9月前
|
SQL Java 数据库连接
Mybatis Plus字段为空值时未更新解决方案
Mybatis Plus字段为空值时未更新解决方案
833 1