Mybatis | 您所在的位置:网站首页 › mybatisplus条件查询顺序影响索引吗 › Mybatis |
本节案例承接上节案例 文章目录 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. 模糊查询示例代码: @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 实验室设备网 版权所有 |