国产化驱动经济自主性与科技创新的未来之路
1397
2022-11-17
SpringBoot+JPA 分页查询指定列并返回指定实体方式
目录SpringBoot JPA分页查询指定列并返回指定实体实体类对应表来创建,举个例子SpringBoot JPA实现自定义语句分页查询1.JPA持久层 InvoiceRepository.java2.服务层
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
}
分页查询的时候只要一句话
// Partner partner 外部传入的分页信息
Page
但是有时候可能不需要返回所有字段,只要返回一部分而已,经过各种尝试,有一种最简单的方法
就是把想要返回的字段再构建成一个实体,实体的属性需要和数据库字段进行映射,然后单独写一个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
}
调用的时候
// Partner partner 外部传入的分页信息
Page
我一开始也尝试过写sql,但是我发现返回数据会变成Page
改了n遍后发现这样是最简单的。。。
SpringBoot JPA实现自定义语句分页查询
例:
1.JPA持久层 InvoiceRepository.java
@Repository
public interface InvoiceRepository extends JpaRepository
@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
}
2.服务层
@Override
public Map findInvoice(int companyID, String status, Integer page, Integer phttp://ageSize) {
Double amount = companyFinanceRepository.findDCompanyFinance(companyID);
//分页查询
Pageable pageable = PageRequest.of(page, pageSize, Sort.Direction.ASC, "id");
Page
//重组返回结果
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;
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~