SpringCloud微服务开发与实战之条件构造器
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
在 MyBatis-Plus 中,Wrapper 类是构建查询和更新条件的核心工具。以下是主要的 Wrapper 类及其功能: AbstractWrapper:这是一个抽象基类,提供了所有 Wrapper 类共有的方法和属性。它定义了条件构造的基本逻辑,包括字段(column)、值(value)、操作符(condition)等。所有的 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 都继承自 AbstractWrapper。 QueryWrapper:专门用于构造查询条件,支持基本的等于、不等于、大于、小于等各种常见操作。它允许你以链式调用的方式添加多个查询条件,并且可以组合使用 and 和 or 逻辑。 UpdateWrapper:用于构造更新条件,可以在更新数据时指定条件。与 QueryWrapper 类似,它也支持链式调用和逻辑组合。使用 UpdateWrapper 可以在不创建实体对象的情况下,直接设置更新字段和条件。 LambdaQueryWrapper:这是一个基于 Lambda 表达式的查询条件构造器,它通过 Lambda 表达式来引用实体类的属性,从而避免了硬编码字段名。这种方式提高了代码的可读性和可维护性,尤其是在字段名可能发生变化的情况下。 LambdaUpdateWrapper:类似于 LambdaQueryWrapper,LambdaUpdateWrapper 是基于 Lambda 表达式的更新条件构造器。它允许你使用 Lambda 表达式来指定更新字段和条件,同样避免了硬编码字段名的问题。
案例剖析:
代码如下:
- package com.zidiu.mp;
-
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.zidiu.mp.domain.po.User;
- import com.zidiu.mp.mapper.UserMapper;
- import lombok.extern.slf4j.Slf4j;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
-
- import java.util.List;
- @Slf4j
- @SpringBootTest
- public class UserMapperTests {
- @Autowired
- private UserMapper userMapper;
- @Test
- public void testQueryWrapper() {
- // 1,构建查询条件
- QueryWrapper<User> wrapper = new QueryWrapper<User>()
- .select("id", "username", "info","balance")
- .like("username", "o")
- .ge("balance", 500);
- // 2,执行查询
- List<User> users = userMapper.selectList(wrapper);
- log.info("users获取的用户信息为:{}", users);
- // System.out.println(users);
- users.forEach(System.out::println);
- }
-
- @Test
- public void testUpdateByWrapper() {
- // 1,创建一个User对象
- User user = new User();
- user.setBalance(2000);
- // 2,更新条件
- QueryWrapper<User> wrapper = new QueryWrapper<User>()
- .eq("username", "Jack");
- // 3,执行更新
- userMapper.update(user,wrapper);
- }
- }
复制代码 案例二剖析:
- package com.zidiu.mp;
-
- import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
- import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
- import com.zidiu.mp.domain.po.User;
- import com.zidiu.mp.mapper.UserMapper;
- import lombok.extern.slf4j.Slf4j;
- import org.junit.jupiter.api.Test;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.test.context.SpringBootTest;
-
- import java.util.List;
- @Slf4j
- @SpringBootTest
- public class UserMapperTests {
- @Autowired
- private UserMapper userMapper;
- @Test
- public void testQueryWrapper() {
- // 1,构建查询条件
- QueryWrapper<User> wrapper = new QueryWrapper<User>()
- .select("id", "username", "info","balance")
- .like("username", "o")
- .ge("balance", 500);
- // 2,执行查询
- List<User> users = userMapper.selectList(wrapper);
- log.info("users获取的用户信息为:{}", users);
- // System.out.println(users);
- users.forEach(System.out::println);
- }
-
- @Test
- public void testUpdateByWrapper() {
- // 1,创建一个User对象
- User user = new User();
- user.setBalance(2000);
- // 2,更新条件
- QueryWrapper<User> wrapper = new QueryWrapper<User>()
- .eq("username", "Jack");
- // 3,执行更新
- userMapper.update(user,wrapper);
- }
- @Test
- void testUpdateWrapper(){
- List<Long> ids = List.of(1L,2L,4L);
- UpdateWrapper<User> userUpdateWrapper = new UpdateWrapper<User>()
- .setSql("balance = balance - 50")
- .in("id", ids);
- userMapper.update(null, userUpdateWrapper);
- }
- }
复制代码 lambda来解决查询条件(解决硬编码问题)- @Test
- public void testLambdaQueryWrapper() {
- LambdaQueryWrapper<User> aa = new LambdaQueryWrapper<User>()
- .select(User::getId, User::getUsername, User::getInfo, User::getBalance)
- .like(User::getUsername, "o")
- .ge(User::getBalance, 500);
- List<User> users = userMapper.selectList(aa);
- log.info("users获取的用户信息:{}", users);
- users.forEach(System.out::println);
- }
复制代码 条件构造器的用法:
QueryWrapper和LambdaQueryWrapper通常用来构建select、delete、update的where条件部分
UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比较特殊才使用
尽量使用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码
mp-demo.zip
(33.8 KB, 下载次数: 0, 售价: 50 金币)
SpringCloud微服务开发与实战
|