Mabatis-Plus (查)使用条件构造器查询的3种方法(QueryWrapper、LambdaQueryWrapper、LambdaQueryChainWrapper)

通过本片:你将学习到Mybatis-Plus查询的3种用法

​        基本覆盖了单表查询的业务需求,( •̀ ω •́ )y


业务场景-举个栗子:现在有一张"用户表(User)",且每个用户的用户名(username)唯一
我们想通过字段"用户名(username)“———查找"用户表”———用户

这里大致介绍一下:
1.QueryWrapper:查询最基础的条件构造器
2.LambdaQueryWrapper:    基于QueryWrapper
3.LambdaQueryChainWrapper:基于LambdaQueryWrapper


话不多说,来人!上Impl层代码(○´・д・)ノ

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    private final UserMapper userMapper;

    public UserServiceImpl(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    /**
     * 通过"用户名(username)"查询用户(唯一)
     * 数据源:user表
     * @param username
     * @return
     */
    @Override
    public User getUserByUsername(String username) {

		// 第 1 种方法 QueryWrapper		    
        // 方法1.1 --- 参数名为:数据库表的实际字段名
        QueryWrapper<User> queryWrapper1 = new QueryWrapper<>();
        queryWrapper1.eq("username", username);
        User user1 = userMapper.selectOne(queryWrapper1);

        // 方法1.2 --- 不想用方法1.1的数据库表字段名,可以用lambda,使用实体类映射数据库表的字段
        QueryWrapper<User> queryWrapper2 = new QueryWrapper<>();
        queryWrapper2.lambda().eq(User::getUsername, username);
        User user2 = userMapper.selectOne(queryWrapper2);



		// 第 2 种方法 LambdaQueryWrapper		
        // 方法2.1 --- Lambda查询条件构造器,
        //			   1.1、1.2的封装,可以少写: lambda()
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(User::getUsername, username);
        User user3 = userMapper.selectOne(lambdaQueryWrapper);

        // 方法2.2 --- Wrappers.<E>lambdaQuery()   
        //			   E是实体类对象 2.1的封装版
        //			   2.1的封装版, 少写:new LambdaQueryWrapper对象
        LambdaQueryWrapper<User> lambdaQueryWrappers1 = Wrappers.<User>lambdaQuery().eq(User::getUsername, username);
        User user4 = userMapper.selectOne(lambdaQueryWrappers1);

        // 方法2.3 --- Wrappers.lambdaQuery(E.class) 
        //			   效果:等同方法2.2
        //			   区别:实体类对象放置位置不同
        LambdaQueryWrapper<User> lambdaQueryWrappers2 = Wrappers.lambdaQuery(User.class).eq(User::getUsername, username);
        User user5 = userMapper.selectOne(lambdaQueryWrappers2);



        // 第 3 种方法 LambdaQueryChainWrapper 			
        // 			  链式查询,个人认为此种写法最美观,推荐!!!
        User user6 = new LambdaQueryChainWrapper<>(userMapper)
                .eq(User::getUsername, username)
                .one(); // 这步骤是查询一条记录,查询列表用:.list()

        return user1;
    }
}
总结:
综上所述,
使用链式查询方法:LambdaQueryChainWrapper
查询的方式最为优雅!推荐使用这种!
lambda表达式还有很多种用法:
or()
orderByAsc(“xxx”)
orderByDesc(“xxx”)
……
这里用法差不多就不一一举栗了
有啥疑虑||错误,欢迎指正!(○´・д・)ノ


看到这里,Mybatis-Plus查询就会用了,
下面内容可选择自行观看,
是对上面代码写法的一些优化,以及一个小坑点

来人,上代码!(○´・д・)ノ

@Override
    public User getUserByUsername(String username) {

        // 方法2.2 (上面的代码)
        LambdaQueryWrapper<User> lambdaQueryWrappers1 = Wrappers.<User>lambdaQuery().eq(User::getUsername, username);
        User user4 = userMapper.selectOne(lambdaQueryWrappers1);
        
		// 方法2.2 (简化的代码)
        User user4 = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                .eq(User::getUsername, username));



        // 方法2.3 (上面的代码)
        LambdaQueryWrapper<User> lambdaQueryWrappers2 = Wrappers.lambdaQuery(User.class).eq(User::getUsername, username);
        User user5 = userMapper.selectOne(lambdaQueryWrappers2);

        // 方法2.3 (简化的代码)
        User user5 = userMapper.selectOne(Wrappers.lambdaQuery(User.class)
                .eq(User::getUsername, username));
        
        return user4;
    }

来人,上小坑点!(○´・д・)ノ

// 方法2.1 正确的
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getUsername, username);
User user3 = userMapper.selectOne(lambdaQueryWrapper);

// 方法2.1 错误的
//        这里有个小坑,因为LambdaQueryWrapper构造函数未实现 E::getXXX
//        所以2.1不能简写成这样:
//        这里会提示:Non-static method cannot be referenced from a static context
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>().eq(User::getUsername, username);
User user3 = userMapper.selectOne(lambdaQueryWrapper);
LambdaQueryWrapperMyBatis-Plus 提供的一个查询条件构造器,用于构建多条件查询。它支持链式调用,可以方便地根据实际需求添加各种查询条件。 下面是一个使用 LambdaQueryWrapper 进行多条件查询的示例: ```java import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.additional.query.impl.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.additional.query.impl.QueryChainWrapper; public class Main { public static void main(String[] args) { // 创建 LambdaQueryWrapper 对象 LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); // 添加查询条件 queryWrapper.eq(User::getName, "Tom") .likeRight(User::getEmail, "@gmail.com") .gt(User::getAge, 18); // 执行查询操作 List<User> userList = userMapper.selectList(queryWrapper); // 输出查询结果 userList.forEach(System.out::println); } } ``` 在上面的示例中,首先创建了一个 LambdaQueryWrapper 对象,然后通过调用对象的方法来添加查询条件。其中,eq() 方法用于等值查询,likeRight() 方法用于右模糊查询,gt() 方法用于大于查询。 最后,调用 selectList() 方法执行查询操作,并将查询结果输出。 通过 LambdaQueryWrapper 可以非常方便地构建多条件查询,还可以支持更多的查询操作,如排序、分页等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值