MybatisPlus较全常用复杂查询的示例(limit、orderby、groupby、having、like...)

 更新时间:2025年12月10日 10:03:20   作者:爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ  
本文主要介绍了MybatisPlus较全常用复杂查询的示例,包括limit、orderby、groupby、having、like等,具有一定的参考价值,感兴趣的可以了解一下

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。以下是 MyBatis-Plus 中常用复杂查询(如 LIMITORDER BYGROUP BYHAVINGLIKE 等)的引例:

1. 环境准备

首先,确保你已经在项目中添加了 MyBatis-Plus 的依赖。以 Maven 为例:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.3.1</version>
</dependency>

2. 实体类和 Mapper 接口

假设我们有一个 User 实体类和对应的 UserMapper 接口:

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;
}
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
 
@Mapper
public interface UserMapper extends BaseMapper<User> {
}

3. 常用复杂查询示例

3.1LIMIT查询

LIMIT 用于限制查询结果的数量。在 MyBatis-Plus 中,可以使用 Page 类来实现类似 LIMIT 的功能。

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
 
    public List<User> getUsersWithLimit(int pageNum, int pageSize) {
        Page<User> page = new Page<>(pageNum, pageSize);
        IPage<User> userPage = userMapper.selectPage(page, null);
        return userPage.getRecords();
    }
}

3.2ORDER BY查询

ORDER BY 用于对查询结果进行排序。在 MyBatis-Plus 中,可以使用 QueryWrapper 来实现排序。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
 
    public List<User> getUsersOrderByAgeDesc() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc("age");
        return userMapper.selectList(wrapper);
    }
}

3.3GROUP BY和HAVING查询

GROUP BY 用于对查询结果进行分组,HAVING 用于筛选分组后的结果。在 MyBatis-Plus 中,可以使用 QueryWrapper 结合 groupBy 和 having 方法来实现。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
import java.util.Map;
 
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
 
    public List<Map<String, Object>> getUsersGroupByAgeHavingCount() {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.select("age", "COUNT(*) as count")
               .groupBy("age")
               .having("COUNT(*) > 1");
        return userMapper.selectMaps(wrapper);
    }
}

3.4LIKE查询

LIKE 用于模糊查询。在 MyBatis-Plus 中,可以使用 QueryWrapper 的 like 方法来实现。

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
 
    public List<User> getUsersLikeName(String keyword) {
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("name", keyword);
        return userMapper.selectList(wrapper);
    }
}

4. 测试代码

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
import java.util.List;
import java.util.Map;
 
@SpringBootApplication
public class Application implements CommandLineRunner {
    @Autowired
    private UserService userService;
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
    @Override
    public void run(String... args) throws Exception {
        // LIMIT 查询
        List<User> usersWithLimit = userService.getUsersWithLimit(1, 10);
        System.out.println("LIMIT 查询结果:" + usersWithLimit);
 
        // ORDER BY 查询
        List<User> usersOrderByAgeDesc = userService.getUsersOrderByAgeDesc();
        System.out.println("ORDER BY 查询结果:" + usersOrderByAgeDesc);
 
        // GROUP BY 和 HAVING 查询
        List<Map<String, Object>> usersGroupByAgeHavingCount = userService.getUsersGroupByAgeHavingCount();
        System.out.println("GROUP BY 和 HAVING 查询结果:" + usersGroupByAgeHavingCount);
 
        // LIKE 查询
        List<User> usersLikeName = userService.getUsersLikeName("张");
        System.out.println("LIKE 查询结果:" + usersLikeName);
    }
}

以上示例展示了 MyBatis-Plus 中常用复杂查询的使用方法,你可以根据实际需求进行调整。

到此这篇关于MybatisPlus较全常用复杂查询的示例(limit、orderby、groupby、having、like...)的文章就介绍到这了,更多相关MybatisPlus 复杂查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Data + Thymeleaf 3 + Bootstrap 4 实现分页器实例代码

    Spring Data + Thymeleaf 3 + Bo

    本篇文章主要介绍了Spring Data + Thymeleaf 3 + Bootstrap 4 实现分页器实例代码,非常具有实用价值,需要的朋友可以参考下
    2017-05-05
  • spring boot入门之诞生背景及优势影响

    spring boot入门之诞生背景及优势影响

    这篇文章主要为大家描述说明了介绍了spring boot诞生的背景以及其产生的优势影响,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】

    Java实现的微信图片处理工具类【裁剪,合并,等比例缩放等】

    这篇文章主要介绍了Java实现的微信图片处理工具类,可实现针对图片的裁剪、合并、等比例缩放、旋转、识别等各种常见的图片处理功能,需要的朋友可以参考下
    2017-11-11
  • Java SpringMVC异步处理详解

    Java SpringMVC异步处理详解

    这篇文章主要介绍了Java springmvc的处理异步,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-10-10
  • Java运行时环境之ClassLoader类加载机制详解

    Java运行时环境之ClassLoader类加载机制详解

    这篇文章主要给大家介绍了关于Java运行时环境之ClassLoader类加载机制的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • JAVA如何调用wsdl过程详解

    JAVA如何调用wsdl过程详解

    这篇文章主要介绍了JAVA如何调用wsdl过程详解,文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • ThreadLocal原理介绍及应用场景

    ThreadLocal原理介绍及应用场景

    本文详细讲解了ThreadLocal原理介绍及应用场景,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • SpringBoot HATEOAS用法简介(入门)

    SpringBoot HATEOAS用法简介(入门)

    这篇文章主要介绍了SpringBoot HATEOAS用法简介(入门),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • KafkaListener注解的实现机制源码解析

    KafkaListener注解的实现机制源码解析

    这篇文章主要为大家介绍了KafkaListener注解的实现机制源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • 详解Maven项目Dependencies常见报错及解决方案

    详解Maven项目Dependencies常见报错及解决方案

    这篇文章主要介绍了详解Maven项目Dependencies常见报错及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论