SpringBoot+JPA 分页查询指定列并返回指定实体方式

目录
  • SpringBoot JPA分页查询指定列并返回指定实体
    • 实体类对应表来创建,举个例子
  • SpringBoot JPA实现自定义语句分页查询
    • 1.JPA持久层 InvoiceRepository.java
    • 2.服务层

SpringBoot JPA分页查询指定列并返回指定实体

用习惯Mybatis,没用过jpa 真是各种踩坑了

脑壳疼,一个分页弄老半天,原来就一句话的事情,唉

先来说说正常的JPA如何操作

实体类对应表来创建,举个例子

@Entity
@Table(name = "td_user")
public class TdUser extends BaseModel {
    private static final long serialVersionUID = 8659266017517096998L;
    /**
     * id
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, name = "id", length = 10)
    private Long id;

    /**
     * 用户所属平台
     */
    @Column(nullable = false, name = "partner_id", length = 11)
    private Integer partnerId;

    /**
     * 用户名
     */
    @Column(nullable = false, name = "username", length = 32, unique = true)
    private String username;

    /**
     * 用户昵称
     */
    @Column(name = "nickname", length = 64)
    private String nickname;

    /**
     * 密码
     */
    @JsonIgnore
    @Column(nullable = false, name = "password", length = 16)
    private String password;

    /**
     * id
     *
     * getter  setter方法省略
     */

相对应的建立操作接口

@Repository
public interface TdUserRepository extends JpaRepository<TdUser, Long>, JpaSpecificationExecutor<TdUser> {
}

分页查询的时候只要一句话

// Partner partner  外部传入的分页信息
Page<TdUser> allPage = TdUserRepository.findAll(pageable);

但是有时候可能不需要返回所有字段,只要返回一部分而已,经过各种尝试,有一种最简单的方法

就是把想要返回的字段再构建成一个实体,实体的属性需要和数据库字段进行映射,然后单独写一个Repository就可以了

比如

@Entity
@Table(name = "td_user")
public class UserVO extends BaseModel {
    private static final long serialVersionUID = 8659266017517096998L;
    /**
     * id
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, name = "id", length = 10)
    private Long id; 

    /**
     * 用户名
     */
    @Column(nullable = false, name = "username", length = 32, unique = true)
    private String username;  

    /**
     * id
     *
     * getter  setter方法省略
     */
@Repository
public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
}

调用的时候

// Partner partner  外部传入的分页信息
Page<User> allPage = UserRepository.findAll(pageable);

我一开始也尝试过写sql,但是我发现返回数据会变成Page<Object[]>,经过json数列化以后数据会变成 [ ["1":"string"],...]这种样子而不是key-value的形式

改了n遍后发现这样是最简单的。。。

SpringBoot JPA实现自定义语句分页查询

例:

1.JPA持久层 InvoiceRepository.java

@Repository
public interface InvoiceRepository extends JpaRepository<Invoice, Integer> {
    @Query(
      value =
          "SELECT * from invoice_apply where company_id=?1 and IF (?2 is null ,1=1,status = ?2)",
      countQuery =
          "select count(*) from invoice_apply where company_id=?1 and IF (?2 is null ,1=1,status = ?2)",
      nativeQuery = true)
  Page<Map> findInvoice(int companyID, String status, Pageable pageable);
}

2.服务层

@Override
  public Map findInvoice(int companyID, String status, Integer page, Integer pageSize) {
    Double amount = companyFinanceRepository.findDCompanyFinance(companyID);
    //分页查询
    Pageable pageable = PageRequest.of(page, pageSize, Sort.Direction.ASC, "id");
    Page<Map> invoiceList = invoiceRepository.findInvoice(companyID, status, pageable);
    //重组返回结果
    Map map = new HashMap();
    map.put("invoice_amount", amount);
    map.put("list", invoiceList.getContent());//数据列表
    map.put("total", invoiceList.getTotalElements());//记录总条数
    map.put("current_page", invoiceList.getNumber());//当前页码
    return map;
  }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Springboot+Mybatis实现分页加条件查询功能

    本文实例为大家分享了Springboot+Mybatis实现分页加条件查询的具体代码,供大家参考,具体内容如下 User.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"         "http://mybatis.org/dtd/mybatis-3-mapp

  • springboot整合mybatis-plus实现多表分页查询的示例代码

    1.新建一个springboot工程 2.需要导入mybatis和mybatis-plus的依赖文件 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.1.1</version> </dependency> <dependency> &l

  • SpringBoot Jpa分页查询配置方式解析

    这篇文章主要介绍了SpringBoot Jpa分页查询配置方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 这是已经被废弃的接口 Sort sort = new Sort(Sort.Direction.DESC,"bean类中字段"); //创建时间降序排序 Pageable pageable = new PageRequest(pageNumber,pageSize,sort); 上面的用法在最新的SpringBoot中已经不

  • springboot整合mybatis-plus 实现分页查询功能

    建一个config类 @Configuration public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor(){ return new PaginationInterceptor(); } } 编写controller post /article/search/{page}/{size} @PostMapping("search/{page}/{size}") p

  • oracle+mybatis-plus+springboot实现分页查询的实例

    今天蠢了一上午才弄出这玩意,话不多说上代码! 1.建一个配置类 package com.sie.demo.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.PaginationInte

  • Springboot中MyBatisplus使用IPage和Page分页的实例代码

    一.需求:实现Springboot中MyBatisplus使用IPage和Page分页 二.技术:MyBatisplus的IPage和Page 三.实现 1.代码结构 2.代码详情 (1)Controller package com.xkcoding.rbac.security.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; i

  • SpringBoot整合PageHelper实现分页查询功能详解

    前言 本文介绍的是MyBatis 分页插件 PageHelper,如果你也在用 MyBatis,建议尝试该分页插件,这一定是最方便使用的分页插件.分页插件支持任何复杂的单表.多表分页. 官方文档:https://pagehelper.github.io/ 项目地址:https://github.com/pagehelper/Mybatis-PageHelper 使用方法 导入依赖 在中央仓库sonatype中搜索 pageHelper,找到 pagehelper-spring-boot-star

  • springboot +mybatis 使用PageHelper实现分页并带条件模糊查询功能

    完整案例: SpringBoot + laypage分页 + 模糊查询 完整案例 下面在通过实例代码介绍下springboot +mybatis 使用PageHelper实现分页并带条件模糊查询功能,内容如下所示: 调用接口Controller类 @ApiOperation("查询列表") @PostMapping("/selectList") public Result selectList(@RequestBody User_InfoListRequest us

  • springboot结合vue实现增删改查及分页查询

    1:首先.创建一个springboot项目,这里我使用以及构建好基本框架的脚手架,打开是这个样子: Result类:已经封装好了三种返回类型的包装类:code,msg,data 2:创建数据库叫mytest(可以自己取名字) CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '序号', `name` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL CO

  • springboot+mongodb 实现按日期分组分页查询功能

    具体代码如下所示: WalletDetailsResp walletDetailsResp = new WalletDetailsResp(); List<WalletDetailsResp.WalletDetail> list = new ArrayList<>(); WalletDetailsResp.PageInfoBean pageInfoBean = new WalletDetailsResp.PageInfoBean(); List<Integer> typ

随机推荐