Java使用MyBatis-Plus的OR条件查询
MyBatis-Plus 是 MyBatis 的增强工具,旨在简化开发,提升开发效率。它提供了许多开箱即用的功能,其中之一便是条件构造器(Wrapper),能够方便地进行复杂的条件查询。本文将详细介绍如何在 MyBatis-Plus 中使用 OR 条件进行查询。
1. 环境准备
首先,确保你的项目已经集成了 MyBatis-Plus。以下是一个简单的 Maven 依赖配置:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
2. 实体类和 Mapper 接口
假设我们有一个用户实体类 User
和相应的 Mapper 接口:
User 实体类
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user")
public class User {
@TableId
private Long id;
private String name;
private Integer age;
private String email;
}
UserMapper 接口
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
3. 条件查询
MyBatis-Plus 提供了 QueryWrapper
和 LambdaQueryWrapper
两种方式来构造查询条件。这里主要介绍如何使用 QueryWrapper
实现 OR 条件查询。
使用 QueryWrapper
QueryWrapper
是一个通用的条件构造器,可以方便地进行条件拼接。以下示例展示了如何使用 OR 条件查询用户:
package com.example.demo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class MyBatisPlusExample implements CommandLineRunner {
@Autowired
private UserMapper userMapper;
@Override
public void run(String... args) throws Exception {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25).or().eq("name", "John");
List<User> users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}
}
在上述代码中,queryWrapper.eq("age", 25).or().eq("name", "John")
构造了一个 OR 条件,表示查询年龄为25或名字为John的用户。
使用 LambdaQueryWrapper
LambdaQueryWrapper
提供了类型安全的条件构造方式,更加简洁和安全。以下是使用 LambdaQueryWrapper
实现相同 OR 条件查询的示例:
package com.example.demo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class MyBatisPlusExample implements CommandLineRunner {
@Autowired
private UserMapper userMapper;
@Override
public void run(String... args) throws Exception {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 25).or().eq(User::getName, "John");
List<User> users = userMapper.selectList(lambdaQueryWrapper);
users.forEach(System.out::println);
}
}
4. 组合复杂查询
MyBatis-Plus 支持任意复杂的查询条件组合,以下示例展示了如何组合多个 AND 和 OR 条件:
package com.example.demo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class MyBatisPlusExample implements CommandLineRunner {
@Autowired
private UserMapper userMapper;
@Override
public void run(String... args) throws Exception {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper
.eq(User::getAge, 25)
.or(wrapper -> wrapper.eq(User::getName, "John").eq(User::getEmail, "john@example.com"));
List<User> users = userMapper.selectList(lambdaQueryWrapper);
users.forEach(System.out::println);
}
}
在这个示例中,查询条件为:年龄为25或名字为John且邮箱为john@example.com的用户。
思维导图
- MyBatis-Plus的OR条件查询
- 环境准备
- Maven依赖
- 实体类和Mapper接口
- User实体类
- UserMapper接口
- 条件查询
- 使用QueryWrapper
- 使用LambdaQueryWrapper
- 组合复杂查询
结论
通过MyBatis-Plus的条件构造器,Java开发者可以方便地进行复杂的查询条件组合,包括AND和OR条件的灵活使用。熟练掌握这些技巧,可以显著提升开发效率和代码可读性。