SpringBoot+JPA 分页查询指定列并返回指定实体方式
作者:斯沃乐。 发布时间:2021-08-26 11:54:57
标签:SpringBoot,JPA,分页查询,指定列,指定实体
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;
}
来源:https://blog.csdn.net/FRYAN28/article/details/109134794


猜你喜欢
- 一、logback日志技术介绍Spring Boot中使用的日志技术为logback。其与Log4J都出自同一人,性能要优于Log4J,是L
- webflux过滤器(RouterFunction实现)相关类与接口HandlerFiterFunction@FunctionalInter
- 还是我们自定View的那几个步骤:1、自定义View的属性2、在View的构造方法中获得我们自定义的属性[ 3、重写onMesure ]4、
- 对于随机数,大家都知道,计算机不 可能产生完全随机的数字,所谓的随机数发生器都是通过一定的算法对事先选定的随机种子做复杂的运算,用产生的结果
- 冒泡排序在八大排序中,冒泡排序是最为出名的排序算法之一!冒泡排序的代码还是相当简单的,两层循环,外层是冒泡轮数,里层是依次比较,这个算法的时
- 学习完数组就能用C语言写出的简单小游戏:编译器使用的为VS2013代码分为三个部分1、头文件 game.h2、源文件 game.c 用来存放
- 概述对于android的so文件的hook根据ELF文件特性分为:Got表hook、Sym表hook和inline hook等。全局符号表(
- 1.通过用FTP进行上传文件,首先要实现建立FTP连接,一般建立FTP连接,需要知道FTP配置有关的信息。一般要在Bean中建立一个Serv
- 下文笔者讲述StringTokenizer对象的简介说明,如下所示StringTokenizer的简介Java StringTokenize
- 1.背景倒计时的效果在网站或其他平台看到的很多了吧,今天就让我们来看看在OpenHarmony中如何实现它吧!2.效果预览视频效果演示传送门
- 一、滑动验证码生成思路1、随机选择一张图片2、生成滑块起点位置(x, y)3、生成滑块轮廓4、抠出滑块5、将滑块部位去除颜色二、主要方法这里
- 本文实例讲述了C#实现控制Windows系统关机、重启和注销的方法。分享给大家供大家参考。具体分析如下:使用.NET和C#.NET,我们可以
- 最近该忙的都忙完了,自己自定义一直是个弱项,也一直想整个钟表玩玩,网上看了一圈,学习了不少,下面自己做做自定义首先,制作钟表第一步,肯定是画
- 我们知道,使用nginx作为文件下载服务器,可以极大地降低对后端Java服务器的负载冲击,但是nginx本身并不提供授权控制,因此好的方案是
- 本文实例分析了C#动态生成DropDownList执行失败原因。分享给大家供大家参考。具体如下:今天研究DDL控件的动态生成的时候遇到了点问
- 如下所示:for (int i= 0; i<= 1084; i++) {if (String.valueOf(i+1).length(
- Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spri
- 一.使用场景一次请求需要往数据库插入多条数据时,可以节省大量时间,mysql操作在连接和断开时的开销超过本次操作总开销的40%。二.实现方法
- 引入spring-cloud-starter-openfeign失败引入下面jar包总是报错jar包丢失<dependency>
- 花了很长时间的实践,终于搞清楚了。类或者链表等,在指针赋值的时候,会使用新的指针。比如:Foo a = c;Foo b = new Foo(