Mybatis-puls——条件查询的三种格式+条件查询null判定+查询投影

这篇具有很好参考价值的文章主要介绍了Mybatis-puls——条件查询的三种格式+条件查询null判定+查询投影。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在mybatis_plus的封装中的Wrapper<T>接口参数就是用于封装查询条件 

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 在测试类中启动如上一个简单的查询,然后控制台运行会输出一大堆无关日志,这里先把这些日志关闭

 去除无关日志文件

先新建一个XML配置文件 

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 然后变成如下,这里configuration标签里面什么都没有配置就是取消所有日志文件了

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

然后再次启动就只剩下spring和mybatis的图标了

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言 

这两个图标也可以消去,在application.yml中关闭mybatis的banner的显示,选择falsemybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 再设置spring的banner-mode为off就可以把spring的banner一起关掉了mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 再次运行就可以看见一个没有多余日志输出的界面了

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 按条件查询的三种方式

 要实现按条件查询,进入到selectlist的源码里面看见需要一个wrapper的对象,在wrapper源码中可以看见wrapper<T>是一个抽象类如下。

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 在Wrapper这个抽象类下面还有一系列的实现类,这里要用到的是QueryWrapper这个实现类,专门用于做查询封装操作的,下面还有一些诸如updatewrapper用于更新操作的 

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

设置查询条件(and关系)

方式一

如下所示新建了一个QueryWrapper对象,然后设置了两个条件

	@Test
	void contextLoads() {
        //方式一:按条件查询
        QueryWrapper qw=new QueryWrapper();
        //age小于25
        qw.lt("age",25);
        //age大于17
        qw.gt("age",17);
        List<mpdb>  userlist=userDao.selectList(qw);
        System.out.println(userlist);
    }

 然后输出正常

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 方式二

        //方式二:lambda格式按条件查询
        QueryWrapper<mpdb> qw=new QueryWrapper<mpdb>();
        qw.lambda().lt(mpdb::getAge,25);
        qw.lambda().gt(mpdb::getAge,17);

        List<mpdb>  userlist=userDao.selectList(qw);
        System.out.println(userlist);

同样正常输出 ,并且防止了因为字段名写错而找不到出错地方

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 方式三

在方式二上简化了

       // 方式三:lambda格式按条件查询
        LambdaQueryWrapper<mpdb> lqw=new LambdaQueryWrapper<mpdb>();
        lqw.lt(mpdb::getAge,25);
        lqw.gt(mpdb::getAge,17);
        List<mpdb>  userlist=userDao.selectList(lqw);
        System.out.println(userlist);

输出结果依旧正确

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

三种方式大部分都推荐用第三种 ,第一种在特殊情况下才使用。

如果过条件过多可以采用这种链式编程的方式 

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

设置查询条件(or关系)

条件语句里面加上一个.or()

        lqw.lt(mpdb::getAge,25).or().gt(mpdb::getAge,17);

NULL值处理

应用场景如下,有空值到后台时要有对应的处理 

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

这里到先到pojo层或者说domain层下面新建一个实体类mpdbQuery用于封装条件查询的条件

,这里直接继承mpdb实体类即可

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言  然后要分析可能有哪些字段有范围,比如日期型有范围,数值型也有范围,在该表中只有age有限制,所以新建一个age2用于描述年龄的上限,收集来的age属性用于描述下限。

准备好后在测试类中如下

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

正常输出

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言 如果有一个为空的话会有如下,查询失败

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 在lt方法还有第二种实现,传一个boolean类型 

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 lt的代码变成如下,如果的判断不成立就不加入该条件。原本上面的都是无条件加入条件

        lqw.lt(null!=mq.getAge2(),mpdb::getAge,mq.getAge2());

 当然,也可以用if判断,但是每个都要加的话就太多了

查询投影

所谓查询投影就是设置查询出来的结果是什么样,达成只显示其中的某一些字段

使用如下的一个select方法,参数就是要投影的字段名

  LambdaQueryWrapper<mpdb> lqw=new LambdaQueryWrapper<mpdb>();
        lqw.select(mpdb::getId,mpdb::getName,mpdb::getAge);
        List<mpdb>  userlist=userDao.selectList(lqw);
        System.out.println(userlist);

输出如下,只有那三个字段mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 上面这个是lambda格式专用。

如果是用第一种方法的话就要变成如下

        //非lambda格式的投影
                QueryWrapper<mpdb> lqw=new QueryWrapper<mpdb>();
        lqw.select("id","name","age","tel");
        List<mpdb>  userlist=userDao.selectList(lqw);
        System.out.println(userlist);

输出如下

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 针对count(*)的查询投影

查询投影只能用这个方式来做,不能用lambda方式

如果要查询count(*)的话因为实体类没有对应的用于接收count(*)的字段,所以这里换一个方式接收,改成如下,String就是字段名,object就是值

这里as count的作用是起别名 

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 输出如下

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 分组查询

使用groupBy方法

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言 输出如下,每一组tel都有对应的数量

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 小结

mybatisplus查询条件为null,Mybatis,mybatis,java,开发语言

 如果有不支持的格式的话就要恢复最早写mybatis的格式来写这了,在DAO层中使用@Select注解的方式文章来源地址https://www.toymoban.com/news/detail-801090.html

到了这里,关于Mybatis-puls——条件查询的三种格式+条件查询null判定+查询投影的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JDBC连接Oracle的三种URL格式

    使用jdbc连接oracle时url有三种格式 格式一: Oracle JDBC Thin using an SID 这种格式是最简单也是用得最多的。 你的oracle的sid可以通过一下指令获得: 格式二: Oracle JDBC Thin using a ServiceName 注意这里的格式,@后面有//, port后面:换成了/,这种格式是Oracle 推荐的格式,因为对于集群来说,

    2024年02月16日
    浏览(31)
  • mybatis插入后返回主键id的三种方式

    第一种:在xml文件,insert标签属性中,添加useGeneratedKeys和keyProperty,如图   第二种:在xml文件,添加selectKey标签属性,各个属性值含义:resultType:查询结果的类型;keyProperty:把查询的值赋给谁;order:在插入前还是后执行,id在insert语句插入之后才会生成id,所以要在插入之

    2024年02月15日
    浏览(32)
  • mybatis-plus进行update的三种方式

    2024年02月12日
    浏览(42)
  • Springboot应用中Mybatis输出SQL日志的三种方法

    目录 一、方法一:指定mybatis日志级别 二、方法二:配置mybatis-config.xml 三、方法三:指定整个mapper包下的日志级别

    2024年01月20日
    浏览(38)
  • mysql去重查询的三种方法

    数据库生成环境中经常会遇到表中有重复的数据,或者进行关联过程中产生重复数据,下面介绍三种剔除重复数据的方法,请针对自己的应用场景选择使用。 下图测试数据中user_name为lilei、zhaofeng的用户是重复数据。 代码如下(示例): 如下图,已将数据剔重,重复数据仅保

    2024年02月06日
    浏览(31)
  • Mybatis Plus之DQL(条件查询方式、查询投影、查询条件设定、字段映射与表名映射)

    增删改查四个操作中,查询是非常重要的也是非常复杂的操作,这块需要我们重点学习下,这节我们主要学习的内容有: 条件查询方式 查询投影 查询条件设定 字段映射与表名映射 1.1 条件查询的类 MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的

    2024年02月05日
    浏览(45)
  • Mybatis1.4 多条件查询

    我们经常会遇到如上图所示的多条件查询,将多条件查询的结果展示在下方的数据列表中。而我们做这个功能需要分析最终的SQL语句应该是什么样,思考两个问题 条件表达式 如何连接 条件字段 企业名称 和 品牌名称 需要进行模糊查询,所以条件应该是: 简单的分析后,我

    2024年02月10日
    浏览(27)
  • Mybatis-Plus批量添加或修改数据的三种方式

    提供的方法 是遍历每一个元素,判断主键是否存在,如果存在则做更新,不存在添加 先获取表中所有的主键 ,然后 判断是否已存在,存在更新,不存在添加 on duplicate key update 是Mysql特有的语法,如下图所示,表中id 为主键 再插入id为1的数据,则提示主键已存在 改成如下

    2024年02月06日
    浏览(32)
  • mysql JDBC的三种查询(普通、流式、游标)

    使用JDBC向mysql发送查询时,有三种方式: 常规查询:JDBC驱动会阻塞的一次性读取全部查询的数据到 JVM 内存中,或者分页读取 流式查询:每次执行rs.next时会判断数据是否需要从mysql服务器获取,如果需要触发读取一批数据(可能n行)加载到 JVM 内存进行业务处理 游标查询:

    2024年02月08日
    浏览(42)
  • python %f格式化输出float的三种用法

    %f是python内置的格式化输出符号,主要用于输出浮点数,一般需要跟print()内置函数进行搭配使用。下面的内容将介绍三种%f的用法。 %f输出浮点数,可能会保留小数点后6位数,下方实例中,%f为格式化输出符号,第二个%符号则用于按顺序匹配对应的%f符号: %f输出指定小数点

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包