温馨提示×

在mybatis helper中如何实现复杂的查询逻辑

小樊
83
2024-08-27 17:09:18
栏目: 编程语言

MyBatis-Plus(简称MP)是一个 MyBatis 的增强工具,用于简化 MyBatis 开发

  1. 使用 LambdaQueryWrapper:

LambdaQueryWrapper 是 MyBatis-Plus 提供的一个查询条件构造器,支持链式调用。你可以使用它来构建复杂的查询条件。例如:

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getAge, 25) // 年龄等于25
           .like(User::getName, "张%") // 名字以"张"开头
           .between(User::getCreateTime, startTime, endTime); // 创建时间在指定范围内
List<User> users = userMapper.selectList(queryWrapper);
  1. 使用 QueryWrapper:

QueryWrapper 是 MyBatis-Plus 提供的另一个查询条件构造器,与 LambdaQueryWrapper 类似,但不使用 Java 8 的 Lambda 表达式。例如:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 25) // 年龄等于25
           .like("name", "张%") // 名字以"张"开头
           .between("create_time", startTime, endTime); // 创建时间在指定范围内
List<User> users = userMapper.selectList(queryWrapper);
  1. 使用 XML 编写自定义查询:

如果你需要更复杂的查询逻辑,可以在对应的 Mapper XML 文件中编写自定义查询。例如:

<!-- UserMapper.xml --><select id="selectUsersByComplexCondition" resultType="com.example.entity.User">
    SELECT * FROM user
    WHERE age = #{age}
      AND name LIKE #{namePattern}
      AND create_time BETWEEN #{startTime} AND #{endTime}
</select>

然后在对应的 Mapper 接口中添加方法声明:

public interface UserMapper extends BaseMapper<User> {
    List<User> selectUsersByComplexCondition(@Param("age") int age, @Param("namePattern") String namePattern, @Param("startTime") Date startTime, @Param("endTime") Date endTime);
}

最后在服务类中调用该方法:

List<User> users = userMapper.selectUsersByComplexCondition(25, "张%", startTime, endTime);

通过以上方法,你可以在 MyBatis-Plus 中实现复杂的查询逻辑。

0