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遍后发现这样是最简单的。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值