MyBatis-Plus条件构造器之condition参数的使用

首先创建一个数据库表,如下图所示:

然后创建一个Spring Boot项目,pom.xml和配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>

 <groupId>org.kaven</groupId>
 <artifactId>mybatis-plus</artifactId>
 <version>1.0-SNAPSHOT</version>

 <parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.4.RELEASE</version>
  <relativePath/>
 </parent>

 <properties>
  <java.version>1.8</java.version>
 </properties>

 <dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-webflux</artifactId>
  </dependency>
  <dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.4.0</version>
  </dependency>
  <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>5.1.49</version>
  </dependency>
  <dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
  </dependency>
 </dependencies>

 <build>
  <plugins>
   <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
  </plugins>
 </build>
</project>
spring:
 application:
 name: mybatis-plus
 datasource:
 driver-class-name: com.mysql.jdbc.Driver
 username: root
 password: ITkaven@123
 url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8&useSSL=false

server:
 port: 8085

logging:
 level:
 root: warn
 com.kaven.mybatisplus.dao: trace
 pattern:
 console: '%p%m%n'

mybatis-plus:
 mapper-locations: classpath:mappers/*.xml

实体类User:

package com.kaven.mybatisplus.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@TableName("user")
@Data
public class User {

 @TableId
 private String id;

 @TableField("username")
 private String username;

 @TableField("password")
 private String password;

 @TableField("age")
 private Integer age;

 /**
  * 使用 @TableField(exist = false) ,表示该字段在数据库中不存在 ,所以不会插入数据库中
  * 使用 transient 、 static 修饰属性也不会插入数据库中
  */
 @TableField(exist = false)
 private String phone;
}

Mapper接口UserMapper:

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.kaven.mybatisplus.entity.User;
import org.springframework.stereotype.Component;

@Component
public interface UserMapper extends BaseMapper<User> {}

启动类:

package com.kaven.mybatisplus;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan(basePackages = "com.kaven.mybatisplus.dao")
public class AppRun {
 public static void main(String[] args) {
  SpringApplication.run(AppRun.class , args);
 }
}

@MapperScan(basePackages = "com.kaven.mybatisplus.dao")这个一定要加上。

我们先在数据库中添加几行数据,方便演示。

我之前介绍的条件构造器都没有使用过condition参数。从AbstractWrapper<T, String, QueryWrapper<T>>的源码可以看到很多方法都有condition参数,它是一个布尔型的参数,意思就是是否将该sql语句(像in()like())加在总sql语句上,如下图所示。

首先我们自己来实现一个和condition参数一样功能的方法。

查询username包含字符k,并且age属于[22 , 40 , 30 ]。

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kaven.mybatisplus.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperConditionTest {

 @Autowired
 private UserMapper userMapper;

 @Test
 public void selectList(){
  String username = "k";
  List<Integer> ageList = Arrays.asList(22 , 40 , 30);
  List<User> userList = userMapper.selectList(condition(username , ageList));
  userList.forEach(System.out::println);
 }

 public QueryWrapper<User> condition(String username , List<Integer> ageList){
  QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
  if(!StringUtils.isEmpty(username)){
   userQueryWrapper.like("username" , username);
  }
  if(!CollectionUtils.isEmpty(ageList)){
   userQueryWrapper.in("age" , ageList);
  }
  return userQueryWrapper;
 }
}

结果如下:

结果是正确的。

我们使用condition参数来实现一下。

package com.kaven.mybatisplus.dao;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kaven.mybatisplus.entity.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.util.Arrays;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperConditionTest {

 @Autowired
 private UserMapper userMapper;

 @Test
 public void selectList(){
  String username = "k";
  List<Integer> ageList = Arrays.asList(22 , 40 , 30);
  List<User> userList = userMapper.selectList(condition(username , ageList));
  userList.forEach(System.out::println);
 }

 public QueryWrapper<User> condition(String username , List<Integer> ageList){
  QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
//  if(!StringUtils.isEmpty(username)){
//   userQueryWrapper.like("username" , username);
//  }
//  if(!CollectionUtils.isEmpty(ageList)){
//   userQueryWrapper.in("age" , ageList);
//  }
  userQueryWrapper.like(!StringUtils.isEmpty(username) , "username" , username)
      .in(!CollectionUtils.isEmpty(ageList) , "age" , ageList);
  return userQueryWrapper;
 }
}

结果如下:

结果也是正确的。

到此这篇关于MyBatis-Plus条件构造器之condition参数的使用的文章就介绍到这了,更多相关MyBatis-Plus condition参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mybatis Plus条件构造器ConditionConstructor用法实例解析

    理解: 原来叫条件构造器,我一直以为都是封装条件对象 即SQL的查询条件,不过都一样. 其目的是因为的实际的需求灵活多变,而我们的SQL的筛选条件也需要跟着变化, 但是有一些固定的字段固定的方式可以保证不变化,那么方法的参数的确定尤为重要 从单一的一个ID,一个String的属性,到一个类型的对象,最后到规范的接口 就是逐渐把可能的情况不断的抽象化,更具有泛用意义 Wrapper的常用方法: eq方法,名称是equals的缩写,两个参数,一个是数据库表字段的名称,一个是表字段值 userQuer

  • MyBatis-Plus条件构造器之condition参数的使用

    首先创建一个数据库表,如下图所示: 然后创建一个Spring Boot项目,pom.xml和配置如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schema

  • MyBatis 多个条件使用Map传递参数进行批量删除方式

    目录 多个条件使用Map传递参数进行批量删除 1.使用场景 2.代码实现 3.实现结果展现 MyBatis 多条件批量删除的sql语句 我把这次的代码贴出来,仅供参考 多个条件使用Map传递参数进行批量删除 1.使用场景 因为项目需要针对资源文件(视频.音频.文档),编辑时候可能出现以下3种情况: 实现的项目效果图: 1.1.删除多个已经选择的标签(与本次文章相关内容) 1.2.新增标签(选择已有标签作为新增,输入新的标签作为新增的) 因为本业务场景之中与此文章相关的内容 重点介绍一下如何,使用

  • mybatis QueryWrapper的条件构造之apply、last、select解析

    目录 QueryWrapper条件构造之apply.last.select mysql上的limit使用 如果是sqlserver 条件构造器QueryWrapper实例 案例一 案例二 案例三 案例四 QueryWrapper条件构造之apply.last.select 场景: 查询数据库限制条数时 mysql上的limit使用 QueryWrapper needSyn = new QueryWrapper(); needSyn.ge("ModifyDate",lmtSynRec.g

  • 关于MyBatis plus条件构造器的逐条详解

    目录 条件构造器 说明 警告 说明 allEq 个别参数说明 eq 实例 ne gt ge lt le between notBetween like notLike likeLeft likeRight isNull isNotNull in 例 例 notIn inSql notInSql groupBy orderByAsc 实例 orderByDesc orderBy having func or and nested apply-拼接SQL 实例 last exists notExis

  • MyBatis传入集合 list 数组 map参数的写法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性

  • 利用MyBatis实现条件查询的方法汇总

    SQL映射文件 Mybatis真正强大的是在于它的SQL映射语句,也是它的流弊之处. 它的功能强大,SQL映射文件的配置却比较简单. 使用SQL映射文件可以减少50%以上的代码量. Mybatis专注于SQL,对于开发人员来说可极大限度地进行SQL调优,以保证性能,下面是SQL映射文件的几个顶级元素配置 1.mapper 它是映射文件的根节点,只有一个属性就是 namespace(命名空间)它的作用是区分不同的mapper,里面的参数是全局唯一的,绑定DAO层接口,即面向接口编程 namespa

  • mybatis plus条件构造器queryWrapper、updateWrapper

    注明:上篇文章介绍了springboot+mybatis-plus通用CRUD的用法,这篇文章我们来介绍一下mybatis-plus强大的条件构造器.mybatis-plus的版本为最新版3.0.3 .条件构造器咱们讲述queryWrapper和updateWrapper的用法.关系.以及强大之处. 首先在这里写下官方文档的链接位置,官方文档说的很详细.如果还想知道在项目中的具体用法请往下看. 一.条件构造器关系介绍 介绍 : 1.上图绿色框为抽象类abstract 2.蓝色框为正常class类

  • Mybatis查询条件包含List的情况说明

    目录 查询条件包含List的情况 在mybatis中查询的语句 查询条件带List和其他类型字段 需求 查询条件包含List的情况 在mybatis中进行搜索时,有时候参数中包含了List,比如传入参数: public class FileRequest{ //文件类型 private Integer fileType; //状态 private List<Status> statusList; } public class Status{ //注册状态 private Integer reg

  • mybatis动态插入list传入List参数的实例代码

    mybatis动态插入list的实例代码如下所述: <insert id="savePrpcitemkindList" parameterType="java.util.List"> insert into prpcitemkind (RISKCODE, ITEMKINDNO, FAMILYNO, FAMILYNAME, PROJECTCODE, CLAUSECODE, CLAUSENAME, KINDCODE, KINDNAME, ITEMNO, IT

  • Bootstrap table中toolbar新增条件查询及refresh参数使用方法

    我们想要在bootstrap-table中自定义查询条件如何实现呢?这些自定义的按钮.输入框是定义在哪个位置呢?还记得上一节中我们在配置中有这样一个属性: //工具按钮用哪个容器 toolbar: '#toolbar', <div id="toolbar"></div> 我们定义的查询条件就是放入到这个div中的,先看一下我们期望的效果: 要实现这样的效果,我们首先要新增查询表单: <div class="container">

随机推荐