当前位置: 代码网 > it编程>编程语言>Java > Mybatis-Plus select不去查全部字段和去重问题

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

2026年04月24日 Java 我要评论
1、mybatis-plus select查询语句默认是查全部字段有两种方法可以指定要查询的字段create table `user` ( `id` bigint(20) not null comm

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com