扩展 MyBatis-Plus 支持的查询条件

MyBatis-Plus 是一个强大的 MyBatis 增强工具,提供了丰富的查询条件构造器和便捷的 CRUD 操作。然而,在实际开发中,我们可能会遇到一些复杂的查询需求,需要扩展 MyBatis-Plus 的功能。本文将详细介绍如何扩展 MyBatis-Plus 支持的查询条件,包括自定义 SQL 查询、Lambda 查询与条件构造器扩展、动态查询条件的实现,以及扩展自定义查询方法与接口。


1. 自定义 SQL 查询

1.1 使用注解实现自定义 SQL

MyBatis-Plus 支持通过 @Select@Update@Insert@Delete 注解实现自定义 SQL 查询。

示例代码:
public interface UserMapper extends BaseMapper<User> {
   
    
    
    @Select("SELECT * FROM user WHERE age > #{age}")
    List<User> selectUsersOlderThan(Integer age);
}
调用方式:
@Service
public class UserService {
   
    
    
    @Autowired
    private UserMapper userMapper;

    public List<User> getUsersOlderThan(Integer age) {
   
    
    
        return userMapper.selectUsersOlderThan(age);
    }
}

1.2 使用 XML 实现自定义 SQL

UserMapper.xml 中定义自定义 SQL:

<select id="selectUsersOlderThan" resultType="User">
    SELECT * FROM user WHERE age > #{age}
</select>
调用方式:

与注解方式相同。


2. Lambda 查询与条件构造器扩展

2.1 Lambda 查询

MyBatis-Plus 提供了 Lambda 查询方式,可以通过方法引用构建查询条件,避免硬编码字段名。

示例代码:
@Service
public class UserService {
   
    
    
    @Autowired
    private UserMapper userMapper;

    public List<User> getUsersByAge(Integer age) {
   
    
    
        return userMapper.selectList(new LambdaQueryWrapper<User>()
            .eq(User::getAge, age) // 使用 Lambda 表达式
        );
    }
}

2.2 条件构造器扩展

MyBatis-Plus 的条件构造器(如 QueryWrapperLambdaQueryWrapper)支持链式调用,可以灵活构建复杂的查询条件。

示例代码:
@Service
public class UserService {
   
    
    
    @Autowired
    private UserMapper userMapper;

    public List<User> getUsersByConditions(String username, Integer minAge, Integer maxAge) {
   
    
    
        return userMapper<