首页 > 其他分享 >解决springboot 多表查询分页查询问题

解决springboot 多表查询分页查询问题

时间:2022-10-08 18:02:01浏览次数:53  
标签:多表 springboot 查询 xunfang baomidou IPage import com mybatisplus

问题

springboot页面显示的数据来自三张不同的表,同时还要分页,不知道怎么查。

解决过程:

1、pom.xml文件中注入分页依赖

image

2、application.yml添加分页配置

image

3、自定义分页的配置类

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 自定义一个配置类,mapper 扫描也可在此写上
 */
@Configuration
@MapperScan("com.xunfang.mapper")
public class PageConfig {
    /**
     * 分页插件
     * @return 分页插件的实例
     */
    @Bean
    public MybatisPlusInterceptor paginationInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }
}

4、自定义查询所有的数据返回的实体类

已有实体不能满足查询,想要多表查询,要将所有查询的属性汇总到一个新的实体类,作为page查询的泛型

这里是我的SaleInformation类,其中productName来自product表,realName来自users表,其余属性都来自sale表

@Data
public class SaleInformation {
    private Integer id;
    private String productName;
    private Float price;
    private Integer quantity;
    private Float totalPrice;
    private Date saleDate;
    private String realName;
}

5、DAO层

mapper

写查询的方法,返回IPage<T> ,参数列表(Page<T> page, @Param(Constants.WRAPPER) Wrapper<T> wrapper)

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xunfang.entity.Sale;
import com.xunfang.entity.SaleInformation;
import org.apache.ibatis.annotations.Param;


public interface SaleMapper extends BaseMapper<Sale> {

    //@Param(Constants.WRAPPER)  固定写法
    IPage<SaleInformation> selectAllPage(Page<SaleInformation> page, @Param(Constants.WRAPPER) Wrapper<Sale> wrapper);

}
mapper.xml

sql语句:多表查询,${ew.customSqlSegment} 是wrapper里的方法

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.xunfang.dao.SaleMapper">

    <select id="selectAllPage" resultType="com.xunfang.entity.SaleInformation">
        select s.id,p.product_name as productName,s.price,s.quantity,s.total_price as totalPrice,s.sale_date as saleDate,u.real_name as realName
        from (sale as s left join product as p on s.product_id=p.id) left join users as u on s.user_id=u.id ${ew.customSqlSegment}
    </select>
</mapper>

7、业务层

service
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.xunfang.entity.PageParams;
import com.xunfang.entity.Sale;
import com.xunfang.entity.SaleInformation;

public interface SaleService extends IService<Sale> {

    IPage<SaleInformation> findPage(PageParams pageParams);
}
serviceImpl
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xunfang.dao.SaleMapper;
import com.xunfang.entity.PageParams;
import com.xunfang.entity.Sale;
import com.xunfang.entity.SaleInformation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@Transactional
public class SaleServiceImpl extends ServiceImpl<SaleMapper, Sale> implements SaleService {

    @Autowired(required = false)
    SaleMapper saleMapper;

    @Override
    public IPage<SaleInformation> findPage(PageParams pageParams) {
        QueryWrapper<SaleInformation> wrapper = new QueryWrapper<>();
        wrapper.orderByDesc(pageParams.getOrdered());
        Page<SaleInformation> page = new Page<>(pageParams.getCurrentPage(), pageParams.getPageSize());
        IPage<SaleInformation> iPage = saleMapper.selectAllPage(page, wrapper);
        return iPage;
    }
}

8、控制层 controller

//分页
@PostMapping("/findPage")
    public IPage<SaleInformation> findPage(@RequestBody PageParams pageParams){
        return saleService.findPage(pageParams);
    }

(这里的 PageParams 是我自定义的分页参数类)

标签:多表,springboot,查询,xunfang,baomidou,IPage,import,com,mybatisplus
From: https://www.cnblogs.com/hwphwc/p/16769742.html

相关文章

  • springboot+热部署
    springboot框架已经用了很长时间了,每次调整代码都需要重启项目,很多时候就算是重启了,项目的一些资源还不能更新这就需要一个东西叫做热部署,顾名思义就是可以像hbuilder中编......
  • Oracle 查询及删除重复数据
    文章转自:划边逅SQL重复记录查询1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断select*frompeoplewherepeopleIdin(selectpeopleIdfromp......
  • springboot 整合 recketMQ 详细步骤
    前提RocketMQ的部署环境可用1依赖包<dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter<......
  • SpringBoot Enum 传参行为学习记录
    在学习springboot枚举值传参序列化时,发现以下行为。@Data@ToStringpublicclassEnumRequest{@ApiModelProperty("订单号")privateStringorderSn;@A......
  • springboot中mybatis-plus简单配置与使用
    依赖mybatis-plus与mybatis依赖不兼容,同时使用会导致报错<dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>${or......
  • 多数据操作(删除与查询)与逻辑删除
            推荐使用配置 ......
  • SpringBoot实战派读书笔记---响应式编程
    1.什么是WebFlux?WebFlux不需要ServletAPI,在完全异步且无阻塞,并通过Reactor项目实现了ReactorStreams规范。WebFlux可以在资源有限的情况下提高系统的吞吐量和......
  • Springboot集成阿里云短信
    目录1前言2准备工作2.1了解流程2.2配置信息2.3短信签名和模板2.3.1签名2.3.2模板2.3.3存入数据库3SDK4集成Springboot4.1集成4.2测试5后记1前言​ 线上系......
  • VMWare中的处理器数量和每个处理器的内核数量概念及查询方法
    1、VMWare中的处理器数量和每个处理器的内核数量概念及查询方法https://www.ngui.cc/el/1256722.html?action=onClick如何查看Window或Linux的CPU、核心数、线程数https......
  • SpringBootServletInitializer的作用
    https://blog.csdn.net/luckyzsion/article/details/81135438?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendF......