关于MyBatis Plus中使用or和and问题

最近在使用MyBatis Plus,发现在拼接条件的时候,and和or会出问题,比如下面这种

QueryWrapper userWrapper = new QueryWrapper();
userWrapper.eq(“name”, name); userWrapper.eq(“pwd”,
pwd).or().eq(“phone”, phone);

这种写法拼出来的SQL语句是这样的:

select * from user where (name = ? and pwd= ? or phone = ?)

这样子是肯定不行的,于是去官网查询,发现正确的写法是这样的

QueryWrapper userWrapper = new QueryWrapper();
userWrapper.eq(“name”, name); userWrapper.and(wrapper ->wrapper.eq(“pwd”, pwd).or().eq(“phone”, phone));

select * from user where name = ? and ( pwd= ? or phone = ?)

补充:MyBatisPlus中and与or的连用

 QueryWrapper<User> userWrapper = new QueryWrapper<>();
  String type = (String) map.get("type");
  if(StringUtils.isNotBlank(type)) {
    userWrapper.eq("is_admin", "admin".equals(type) ? true : false);
  }
  String keys = (String) map.get("key");
  if(StringUtils.isNotBlank(keys)) {
    userWrapper.and(wrapper -> wrapper.like("login_name", keys).or().like("tel", keys).or().like("email", keys));
  }

对应打印的SQL语句为:

SELECT
    id,
    login_name AS loginName,
    is_admin AS adminUser,
    ...
    del_flag AS delFlag,
    remarks
  FROM
    sys_user
  WHERE
    is_admin = 0
    AND (
      login_name LIKE '%j%'
      OR tel LIKE '%j%'
      OR email LIKE '%j%'
    )

注意:

userWrapper.and(…)中的and为后面的条件加上了括号,如果没有and(),直接使用

userWrapper.like("login_name", keys).or().like("tel", keys).or().like("email", keys)

这一部分对应的SQL语句是不会被括号包围的(若使用or(…),同理);

2. and(…)中的wrapper -> wrapper,注意名称需要相同。

到此这篇关于关于MyBatis Plus中使用or和and问题的文章就介绍到这了,更多相关MyBatis Plus使用or和and内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MyBatisPlus中使用or()和and()遇到的问题

    在项目中使用MyBatisPlus中的or()查询时由于误用,导致查询数据不对,仅作记录. 写法一: LambdaQueryWrapper<Task> queryWrapper = new QueryWrapper<Task>().lambda(); queryWrapper .eq(Task::getUserId, "15") .eq(Task::getStatus, 2) .or() .eq(Task::getFileSize, 3251544304L);

  • mybatis-plus  mapper中foreach循环操作代码详解(新增或修改)

    .循环添加 接口处: 分别是 void 无返回类型 :有的话是(resultType)返回类型,参数类型(parameterType) list , 如: 在mapper文件中分别对应ID,参数类型和返回类型. 循环处理,如下: <insert id="insertPack" parameterType="java.util.List"> insert into t_ev_bu_pack ( PACK_CODE, BIN, PACK_PROD_TIME,

  • Mybatis-Plus3.2.0 MetaObjectHandler 无法进行公共字段全局填充

    问题描述 最近在做的这个项目架构组对于配置文件决定,采取的是 .xml 配置文件 一个数据中台项目,因为部署环境比较复杂,可能需要适配阿里.腾讯.开源等环境和机房,所以配置文件和启动类为三类 之前写的 MetaObjectHandler 都是采用的 SpringBoot 配置方式开发,突然换成 .xml 配置文件,还是有不少坑的,其中就有配置的 MetaObjectHandler 死活不起作用 ⬆️

  • Mybatis-Plus-AutoGenerator 最详细使用方法

    AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity.Mapper.Mapper XML.Service.Controller 等各个模块的代码,极大的提升了开发效率.可以通过模版等一系列的方式来生成代码,⚠️这个比Mybatis-Generator的更加强大,纯java代码..官方地址:https://mp.baomidou.com/guide/generator.html package com.cikers.p

  • 整理Java的MyBatis框架中一些重要的功能及基本使用示例

    基本用法回顾: SQL语句存储在XML文件或Java 注解中.一个MaBatis映射的示例(其中用到了Java接口和MyBatis注解): package org.mybatis.example; public interface BlogMapper { @Select("select * from Blog where id = #{id}") Blog selectBlog(int id); } 执行的示例: BlogMapper mapper = session.getMapp

  • Java的MyBatis框架中XML映射缓存的使用教程

    MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.默认情况下是没有开启缓存的,要开启二级缓存,你需要在你的SQL映射文件中添加一行: <cache/> 字面上看就是这样.这个简单语句的效果如下: 1.映射语句文件中的所有select语句将会被缓存. 2.映射语句文件中的所有insert,update和delete语句会刷新缓存. 3.缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回. 4.根据时间表(比如 no Flush Inter

  • MyBatis框架中mybatis配置文件详细介绍

    一.注册DB连接四要素属性文件 <propertiesresource="jdbc.properties"/> 二.将指定包中所有类的简单类名当作其别名 <typeAliases> <packagename="com.bjpowernode.beans"/> </typeAliases> 三.配置运行环境 <environmentsdefault="testEM"> <enviro

  • mybatis xml中特殊字符处理及特殊符号

    下面给大家介绍mybatis xml 中特殊字符处理方法,具体内容如下所示:  1,CDATA区: 它的全称为character data,以"<![CDATA[ "开始,以" ]]>" 结束,在两者之间嵌入不想被解析程序解析的原始数据,解析器不对CDATA区中的内容进行解析,而是将这些数据原封不动地交给下游程序处理. 2,特殊字符 : xml 中表示:   <= 小于等于.    >= 大于等于 需加  这样的标记:     <![C

  • 优化MyBatis配置文件中的配置详解

    本文研究的主要是优化MyBatis配置文件中的配置的相关内容,具体介绍如下. 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中,如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN&

  • Mybatis plus中使用in查询出错如何解决

    不想看我bb的直接点上面的 ''解决方法'' 我的情况是这样的,在使用mybatis plus提供的QueryWrapper方法里的in查询时,我的参数为类似"1,2,3,4"这样的字符串 //要查的参数 String masterIds = "81554,5654,55948,48945"; QueryWrapper<FpjyPauperInfo> pauperqw = new QueryWrapper<>(); pauperqw.in(&

  • MyBatis Plus中代码生成器使用详解

    按照官网上实例尝试了一下,感觉MyBatis plus中代码生成器还是很强大的,以下是测试的总结: 使用MybatisPlus的主要依赖 引入plus依赖(苞米豆) <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </depe

  • 关于MyBatis Plus中使用or和and问题

    最近在使用MyBatis Plus,发现在拼接条件的时候,and和or会出问题,比如下面这种 QueryWrapper userWrapper = new QueryWrapper(); userWrapper.eq("name", name); userWrapper.eq("pwd", pwd).or().eq("phone", phone); 这种写法拼出来的SQL语句是这样的: select * from user where (name

  • 关于mybatis plus 中的查询优化问题

    传统的mybatis plus 查询写法 对于常规的mybatis单表查询,我们既可以采用LambdaQueryWrapper查询,也可以使用QueryWrapper查询. LambdaQueryWrapper具有防误写.规范代码等好处,但是缺点是无法在复杂的多表查询中使用. 相比较来说,使用QueryWrapper编写查询更加灵活,可以适应更复杂的查询场景. 我们首先看一个QueryWrapper查询的例子 public List<UserMo> list (UserForm userFor

  • mybatis+springboot中使用mysql的实例

    目录 依赖引入 配置引入 案例实现 案例源码 在软件开发中,数据库的引入是必不可少的,其中又属mysql使用最为广泛,而在springboot中,集成使用mysql的方式有很多(例如jpa),这里来展现一下通过mybatis框架在springboot中使用mysql. 依赖引入 首先在使用初始化工程的时候加入mybatis.mysql相关的依赖,如下所示: <dependencies> <dependency> <groupId>org.springframework.

随机推荐