问题:MybatisPlus中如何进行有条件查询?
–解答:在MybatisPlus中进行条件查询有两种方式,第一种就是在XxxMapper中编写自定义SQL语句;另一种就是使用MybatisPlus提供的条件查询抽象类Wrapper,该抽象类是MybatisPlus中的顶级条件查询父类,我们一般使用其子类的子类来进行条件查询。
LambdaWrapper可以使用Lambda表达式指定查询或修改条件,优点是可以确保字段的正确;
UpdateWrapper和QueryWrapper分别对应修改和查询时指定条件,相较于使用Lambda语法,可能会出现字段书写错误导致数据库中出现错误信息。
实际使用 QueryWrapper
1 2 3 4 5 6 7 8 9 10 @Test public void testQueryWrapper () { QueryWrapper<User> queryWrapper = new QueryWrapper <>(); queryWrapper.like("name" ,"张" ).between("age" ,10 ,20 ).isNotNull("email" ); List<User> users = userMapper.selectList(queryWrapper); for (User u : users){ System.out.println(u); } }
底层执行的SQL
1 2 = = > Preparing: SELECT id,name,age,email FROM t_user WHERE (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL )= = > Parameters: % 张% (String), 10 (Integer ), 20 (Integer )
1 2 3 4 5 6 7 @Test public void testQueryWrapper2 () { QueryWrapper<User> queryWrapper = new QueryWrapper <>(); List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper.select("name" , "email" )); maps.forEach(System.out::println); }
底层执行的SQL
1 2 3 = = > Preparing: SELECT name,email FROM t_user= = > Parameters: <= = Columns: name, email
至于更多方法这里不再一一演示,请自行探索
UpdateWrapper
1 2 3 4 5 6 7 8 @Test public void testUpdateWrapper () { UpdateWrapper<User> updateWrapper = new UpdateWrapper <>(); updateWrapper.set("name" ,"王五" ).eq("id" ,1768110773964066818L ); int count = userMapper.update(updateWrapper); System.out.println("count:" + count); }
底层执行的SQL
1 2 = = > Preparing: UPDATE t_user SET name= ? WHERE (id = ?)= = > Parameters: 王五(String), 1768110773964066818 (Long)
至于更多方法这里不再一一演示,请自行探索
LambdaWrapper
使用方法和QueryWrapper、UpdateWrapper一样,只不过在指定字段时,使用的是函数式编程,防止字段写错
1 2 3 4 5 6 7 @Test public void testLambdaQueryWrapper () { LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper <>(); lambdaQueryWrapper.like(User::getName, "张" ).between(User::getAge, 10 , 20 ).isNotNull(User::getEmail); List<User> users = userMapper.selectList(lambdaQueryWrapper); for (User u : users) System.out.println(u); }
底层SQL
1 2 = = > Preparing: SELECT id,name,age,email FROM t_user WHERE (name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL )= = > Parameters: % 张% (String), 10 (Integer ), 20 (Integer )