后端分页查询该怎么做

本文介绍了如何在后端实现分页查询,包括前端代码的分页模块和控制逻辑,后端的Controller、Service和POJO层的详细操作,以及最终的效果展示。示例中提到了Spring Boot和Hibernate的多表查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在要实现两个关联表的查询

一、前端代码

1.1 分页模块

<el-pagination class="fy"
                     layout="total, sizes, prev, pager, next, jumper"
                     :total="total"
                     :page-sizes="[5, 10]"
                     :page-size= "pageSize"
                     v-show="total>5"
                     @size-change="handleSizeChange"
                     @current-change="handleCurrentChange"
                     background style="margin-top:10px">
      </el-pagination>

在这里插入图片描述
1.2 控制代码

<script>
import IdentityCheck from './IdentityCheck'
export default {
  name: 'BUnavailable',
  data: function () {
    return {
      account_id: '',
      usertype: '',
      interval: '',
      total: 0,
      //页面的条数,初始设置是5
      pageSize: 5,
      //当前页面的页数
      currentPage: 1,
      list: []
    }
  },
  created () {
  //页面一打开,就触发后端分页查询接口
    this.$axios
      .post('/showUnavailables', {
        page: this.currentPage,
        size: this.pageSize
      })
      .then(successResponse => {
        if (successResponse.data.success) {
          this.list = successResponse.data.data.content
          this.total = successResponse.data.data.totalElements
          if (this.list.length < 1) {
            this.$message('查询时间段内无项目')
          } else {
            for (let m in this.list) {
              this.$axios
                .post('/lookpic', {
                  imgpath: this.list[m].projectdetails
                })
                .then(successResponse => {
                  if (successResponse.data.success) {
                    console.log(successResponse.data.data)
                    this.list[m].projectdetails = 'data:image/png;base64,' + successResponse.data.data.base64id
                  } else {
                    this.$message(successResponse.data.msg)
                  }
                })
                .catch(failResponse => {
                })
            }
          }
        } else {
          this.$message(successResponse.data.msg)
        }
      })
      .catch(failResponse => {
      })
  },
  methods: {
  //处理当前页面
    handleCurrentChange (currentPage) {
      this.getList(currentPage)
    },
    //处理页面条数的变化
    handleSizeChange (pageSize) {
      this.pageSize = pageSize
      this.getList(this.currentPage)
    },
    //触发后端接口,查询,返回分页后的项目
    getList (currentPage) {
      this.currentPage = currentPage
      this.$axios
        .post('/showUnavailables', {
          page: this.currentPage,
          size: this.pageSize
        })
        .then(successResponse => {
          if (successResponse.data.success) {
            this.list = successResponse.data.data.content
            this.total = successResponse.data.data.totalElements
            if (this.list.length < 1) {
              this.$message('查询时间段内无项目')
            } else {
              for (let m in this.list) {
                this.$axios
                  .post('/lookpic', {
                    imgpath: this.list[m].projectdetails
                  })
                  .then(successResponse => {
                    if (successResponse.data.success) {
                      console.log(successResponse.data.data)
                      this.list[m].projectdetails = 'data:image/png;base64,' + successResponse.data.data.base64id
                    } else {
                      this.$message(successResponse.data.msg)
                    }
                  })
                  .catch(failResponse => {
                  })
              }
            }
          } else {
            this.$message(successResponse.data.msg)
          }
        })
        .catch(failResponse => {
        })
    }
  },
  components: {
    IdentityCheck
  }
}

二、后端代码

2.1 Controller层

/**
     * 查询尚不可行的项目信息
     * @param json
     * @return
     */
    @CrossOrigin
    @PostMapping(value = "/api/showUnavailables")
    @ResponseBody
    public Result<Page<Project_Overview>> showUnavailablesPage(@RequestBody JSONObject json) {
        int page = 1, size = 5;
        Page<Project_Overview> projectOverviews = null;
        if (json.getInteger("page") == null || json.getInteger("size") == null) {
            log.error("[SWController.showUnavailables]:json中的page或size为空");
            return null;
        }
        page=json.getInteger("page")-1;
        size=json.getInteger("size");
        Page<Project_Overview> project_overviews = project_overviewService.showUnavailablesPage(page, size);
        return new Result<>(project_overviews);
    }

2.2 Service层

 public Page<Project_Overview> showUnavailablesPage(int page,int size){
 		//分页的当前页和页面的条数
        Pageable pageable = PageRequest.of(page, size);
        //用于写数据库的筛选条件
        Specification<Project_Overview> specification = new Specification<Project_Overview>() {
            @Override
            public Predicate toPredicate(Root<Project_Overview> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
                List<Predicate> predicateList = new ArrayList<>();
                predicateList.add(criteriaBuilder.equal(root.get("isacceptsw"),"无"));
                Predicate[] predicates = new Predicate[predicateList.size()];
                return query.where(predicateList.toArray(predicates)).getRestriction();
            }
        };
        return project_overviewdao.findAll(specification,pageable);
    }

2.3 POJO

package com.evan.wj.pojo;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;

import javax.persistence.*;

@Entity
@Table(name = "project_overview")
@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"})
@Data
public class Project_Overview {

    /**
     * 项目ID
     **/
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "project_id")
    private int projectid;

    /**
     * 产品名称
     **/
    @Column(name = "project_name")
    private String projectname;

    /**
     * 产品内容,产品结构式图片等
     **/
    @Column(name = "project_details")
    private String projectdetails;

    /**
     * 需求量
     **/
    @Column(name = "project_sl")
    private String projectsl;

    /**
     * Cas号
     **/
    @Column(name = "cas")
    private String cas;

    /**
     * 询单单位名称
     **/
    @Column(name = "kh_name")
    private String khname;

    /**
     * 询单人员姓名
     **/
    @Column(name = "khry_name")
    private String khryname;

    /**
     * 询单人员身份
     **/
    @Column(name = "khry_type")
    private String khrytype;

    /**
     * 询单人联系方式
     **/
    @Column(name = "khry_contact")
    private String khrycontact;

    /**
     * 询单人身份是否真实
     **/
    @Column(name = "khry_Isreal")
    private String khryisreal;

    /**
     * 客户类型,“企业”或“高校”
     **/
    @Column(name = "kh_type")
    private String khtype;

    /**
     * 客户合作历史,“新客户”or“老客户”
     **/
    @Column(name = "co_history")
    private String cohistory;

    /**
     * 是否有钱,“有钱”、“一般”、“没钱”
     **/
    @Column(name = "is_money")
    private String ismoney;

    @Column(name = "is_deal")
    private String isdeal;

    /**
     * 有无成交机会,“有”“无”(商务人员填写)
     **/
    @Column(name = "is_accept_sw")
    private String isacceptsw;

    /**
     * 备注,客户对产品纯度,货期等方面的特殊要求
     **/
    @Column(name = "bz")
    private String bz;

    @Column(name="model_name")
    private String modelname;

    /**
     * 询单日期
     **/
    @Column(name = "create_date")
    private java.time.LocalDateTime createdate;

    /**
     * 修改日期
     **/
    @Column(name = "update_date")
    private java.time.LocalDateTime updatedate;

    @Column(name = "create_name")
    private String createname;

    @Column(name = "update_name")
    private String updatename;

    @Column(name = "test_result")
    private String testresult;

    @OneToOne
    @JoinColumn(name = "project_id")
    private ProjectZt projectZt;
}

三、效果展示

在这里插入图片描述

Spring Boot笔记-Hibernate中@ManyToOne及@OneToOne
springboot jpa 多条件查询(多表)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Micheal_YCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值