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 的条件构造器(如 QueryWrapper
和 LambdaQueryWrapper
)支持链式调用,可以灵活构建复杂的查询条件。
示例代码:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> getUsersByConditions(String username, Integer minAge, Integer maxAge) {
return userMapper<