Mybatis 您所在的位置:网站首页 mybatisplus条件查询顺序影响索引吗 Mybatis

Mybatis

2024-07-17 02:06| 来源: 网络整理| 查看: 265

本节案例承接上节案例

文章目录 1. 条件构造器1. allEq1.1 说明1.2 测试用例(我们主要是查看生成的SQL)1.2.1 wrapper.allEq(params):包含null1.2.2 wrapper.allEq(params, false):不包含null1.2.3 wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id")), params):过滤器过滤出指定的条件 2. 基本比较操作3. 模糊查询4. 排序5. 逻辑查询6. select(指定查询的字段:默认所有)

1. 条件构造器

在Mybatis-Plus中,Wrapper接口的实现类关系如下: 在这里插入图片描述

可以看到,AbstractWrapper和AbstractChainWrapper是重点实现,接下来我们重点学习AbstractWrapper以及其子类。

说明:

QueryWrapper(LambdaQueryWrapper) 和 UpdateWrapper(LambdaUpdateWrapper) 的父类 用于生成 sql的 where 条件, entity 属性也用于生成 sql 的 where 条件 注意: entity 生成的 where 条件与 使用各个 api 生成的 where 条件没有任何关联行为。

下面学习具体的条件构造器

1. allEq

该方法用来查找所有符合条件的数据。

1.1 说明

在这里插入图片描述

1.2 测试用例(我们主要是查看生成的SQL)

params为:

Map params = new HashMap(); params.put("name", "李四"); params.put("age", "20"); params.put("password", null); 1.2.1 wrapper.allEq(params):包含null

生成的SQL为:SELECT id,user_name,password,name,age,email FROM tb_user WHERE (password IS NULL AND name = ? AND age = ?)

... QueryWrapper wrapper = new QueryWrapper(); wrapper.allEq(params); this.userMapper.selectList(wrapper); ...

在这里插入图片描述

1.2.2 wrapper.allEq(params, false):不包含null

生成的SQL为:SELECT id,user_name,password,name,age,email FROM tb_user WHERE (name = ? AND age = ?)

... QueryWrapper wrapper = new QueryWrapper(); wrapper.allEq(params, false); this.userMapper.selectList(wrapper); ...

在这里插入图片描述

1.2.3 wrapper.allEq((k, v) -> (k.equals(“age”) || k.equals(“id”)), params):过滤器过滤出指定的条件

示例1:

生成的SQL为:SELECT id,user_name,password,name,age,email FROM tb_user WHERE (age = ?)

... QueryWrapper wrapper = new QueryWrapper(); // 这里查询的是查询的key要么是age要么是id wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id")), params); this.userMapper.selectList(wrapper); ...

示例2:

生成的SQL为:SELECT id,user_name,password,name,age,email FROM tb_user WHERE (name = ? AND age = ?)

... QueryWrapper wrapper = new QueryWrapper(); // 这里查询的是查询的key要么是age要么是id要么是name wrapper.allEq((k, v) -> (k.equals("age") || k.equals("id") || k.equals("name")), params); this.userMapper.selectList(wrapper); ... 2. 基本比较操作 eq(equal):等于 =ne(not equal):不等于 gt(greater than):大于 >ge(Greater than or equal to):大于等于 >=It(less than):小于 System.out.println(user); } }

生成的sql为:SELECT id,user_name,password,name,age,email FROM tb_user WHERE (password = ? AND age >= ? AND name IN (?,?,?)) 在这里插入图片描述

3. 模糊查询

like

示例代码:

@Test public void testLike() { QueryWrapper wrapper = new QueryWrapper(); // name like '%五' wrapper.likeLeft("name", "五"); List users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }

生成的sql为:SELECT id,user_name,password,name,age,email FROM tb_user WHERE (name LIKE '%五') 在这里插入图片描述

4. 排序

在这里插入图片描述

示例代码;

在这里插入图片描述

@Test public void testOrderByAgeDesc() { QueryWrapper wrapper = new QueryWrapper(); // 按照age和name逆序排序 // SELECT id,user_name,password,name,age,email FROM tb_user ORDER BY age ASC,name ASC wrapper.orderBy(true, true, "age", "name"); List users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }

生成的sql为:com.tian.springbootmybatisplus.SpringbootMybatisplusApplicationTests#testOrderByAgeDesc 在这里插入图片描述

5. 逻辑查询

在这里插入图片描述

示例代码:

@Test public void testOr() { QueryWrapper wrapper = new QueryWrapper(); // 查询name为王五 或者 age为21的用户 wrapper.eq("name", "王五").or().eq("age", 21); List users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }

生成的sql为:SELECT id,user_name,password,name,age,email FROM tb_user WHERE (name = ? OR age = ?)

在这里插入图片描述

6. select(指定查询的字段:默认所有)

在Mybatis-Plus查询中,默认查询所有的字段,如果有需要也可以通过select方法进行指定字段。

示例代码:

查询 name 为 王五 或者 age 为 21 的用户的 id和name和age

@Test public void testSelect() { QueryWrapper wrapper = new QueryWrapper(); // 查询 name 为 王五 或者 age 为 21 的用户的 id和name和age wrapper.eq("name", "王五") .or() .eq("age", 21) .select("id", "name", "age"); //指定查询的字段 List users = this.userMapper.selectList(wrapper); for (User user : users) { System.out.println(user); } }

生成的sql为:SELECT id,name,age FROM tb_user WHERE (name = ? OR age = ?)

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有