最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+JPA?分頁(yè)查詢指定列并返回指定實(shí)體方式

 更新時(shí)間:2021年12月07日 10:59:17   作者:斯沃樂(lè)。  
這篇文章主要介紹了SpringBoot+JPA?分頁(yè)查詢指定列并返回指定實(shí)體方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot JPA分頁(yè)查詢指定列并返回指定實(shí)體

用習(xí)慣Mybatis,沒(méi)用過(guò)jpa 真是各種踩坑了

腦殼疼,一個(gè)分頁(yè)弄老半天,原來(lái)就一句話的事情,唉

先來(lái)說(shuō)說(shuō)正常的JPA如何操作

實(shí)體類對(duì)應(yīng)表來(lái)創(chuàng)建,舉個(gè)例子

@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;
 
    /**
     * 用戶所屬平臺(tái)
     */
    @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方法省略
     */

相對(duì)應(yīng)的建立操作接口

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

分頁(yè)查詢的時(shí)候只要一句話

// Partner partner  外部傳入的分頁(yè)信息
Page<TdUser> allPage = TdUserRepository.findAll(pageable);

但是有時(shí)候可能不需要返回所有字段,只要返回一部分而已,經(jīng)過(guò)各種嘗試,有一種最簡(jiǎn)單的方法

就是把想要返回的字段再構(gòu)建成一個(gè)實(shí)體,實(shí)體的屬性需要和數(shù)據(jù)庫(kù)字段進(jìn)行映射,然后單獨(dú)寫(xiě)一個(gè)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> {
}

調(diào)用的時(shí)候

// Partner partner  外部傳入的分頁(yè)信息
Page<User> allPage = UserRepository.findAll(pageable);

我一開(kāi)始也嘗試過(guò)寫(xiě)sql,但是我發(fā)現(xiàn)返回?cái)?shù)據(jù)會(huì)變成Page<Object[]>,經(jīng)過(guò)json數(shù)列化以后數(shù)據(jù)會(huì)變成 [ ["1":"string"],...]這種樣子而不是key-value的形式

改了n遍后發(fā)現(xiàn)這樣是最簡(jiǎn)單的。。。

SpringBoot JPA實(shí)現(xiàn)自定義語(yǔ)句分頁(yè)查詢

例:

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.服務(wù)層

@Override
  public Map findInvoice(int companyID, String status, Integer page, Integer pageSize) {
    Double amount = companyFinanceRepository.findDCompanyFinance(companyID);
    //分頁(yè)查詢
    Pageable pageable = PageRequest.of(page, pageSize, Sort.Direction.ASC, "id");
    Page<Map> invoiceList = invoiceRepository.findInvoice(companyID, status, pageable);
    //重組返回結(jié)果
    Map map = new HashMap();
    map.put("invoice_amount", amount);
    map.put("list", invoiceList.getContent());//數(shù)據(jù)列表
    map.put("total", invoiceList.getTotalElements());//記錄總條數(shù)
    map.put("current_page", invoiceList.getNumber());//當(dāng)前頁(yè)碼
    return map;
  }

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Kafka實(shí)現(xiàn)延遲隊(duì)列的示例代碼

    Java Kafka實(shí)現(xiàn)延遲隊(duì)列的示例代碼

    kafka作為一個(gè)使用廣泛的消息隊(duì)列,很多人都不會(huì)陌生。本文將利用Kafka實(shí)現(xiàn)延遲隊(duì)列,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-08-08
  • Spring Cloud Feign組件實(shí)例解析

    Spring Cloud Feign組件實(shí)例解析

    這篇文章主要介紹了Spring Cloud Feign組件實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Java HashMap底層實(shí)現(xiàn)原理

    Java HashMap底層實(shí)現(xiàn)原理

    HashMap在不同的JDK版本下的實(shí)現(xiàn)是不同的,在JDK1.7時(shí),HashMap 底層是通過(guò)數(shù)組+鏈表實(shí)現(xiàn)的;而在JDK1.8時(shí),HashMap底層是通過(guò)數(shù)組+鏈表或紅黑樹(shù)實(shí)現(xiàn)的,本詳細(xì)介紹了HashMap底層是如何實(shí)現(xiàn)的,需要的朋友可以參考下
    2023-05-05
  • 解析Java編程之Synchronized鎖住的對(duì)象

    解析Java編程之Synchronized鎖住的對(duì)象

    這篇文章主要介紹了解析Java編程之Synchronized鎖住的對(duì)象,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-10-10
  • Spring-Smart-DI 動(dòng)態(tài)切換實(shí)現(xiàn)類的步驟

    Spring-Smart-DI 動(dòng)態(tài)切換實(shí)現(xiàn)類的步驟

    文章介紹了如何使用spring-smart-di的@AutowiredProxySPI注解來(lái)實(shí)現(xiàn)動(dòng)態(tài)切換服務(wù)提供商的功能,通過(guò)配置點(diǎn)和代理對(duì)象,實(shí)現(xiàn)動(dòng)態(tài)切換而無(wú)需重啟服務(wù),感興趣的朋友一起看看吧
    2025-03-03
  • JDK10新特性之var泛型和多個(gè)接口實(shí)現(xiàn)方法

    JDK10新特性之var泛型和多個(gè)接口實(shí)現(xiàn)方法

    這篇文章主要介紹了JDK10的新特性:var泛型和多個(gè)接口實(shí)現(xiàn)方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot?2.x整合Log4j2日志的詳細(xì)步驟

    SpringBoot?2.x整合Log4j2日志的詳細(xì)步驟

    log4j2優(yōu)越的性能其原因在于log4j2使用了LMAX,一個(gè)無(wú)鎖的線程間通信庫(kù)代替了,logback和log4j之前的隊(duì)列,并發(fā)性能大大提升,下面這篇文章主要給大家介紹了關(guān)于SpringBoot?2.x整合Log4j2日志的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • JAVA基礎(chǔ)快速?gòu)娜腴T(mén)到精通

    JAVA基礎(chǔ)快速?gòu)娜腴T(mén)到精通

    Java是一門(mén)面向?qū)ο蟮木幊陶Z(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征
    2022-03-03
  • 你應(yīng)該知道的21個(gè)Java核心技術(shù)

    你應(yīng)該知道的21個(gè)Java核心技術(shù)

    Java的21個(gè)核心技術(shù)點(diǎn),你知道嗎?這篇文章主要為大家詳細(xì)介紹了Java核心技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • 淺析Java中為什么要設(shè)計(jì)包裝類

    淺析Java中為什么要設(shè)計(jì)包裝類

    我們知道Java是一個(gè)面相對(duì)象的編程語(yǔ)言,基本類型并不具有對(duì)象的性質(zhì),為了讓基本類型也具有對(duì)象的特征,就出現(xiàn)了包裝類型,它相當(dāng)于將基本類型“包裝起來(lái)”,使得它具有了對(duì)象的性質(zhì),并且為其添加了屬性和方法,豐富了基本類型的操作
    2021-06-06

最新評(píng)論

罗江县| 师宗县| 沙河市| 石阡县| 镇宁| 台东市| 湘阴县| 香港| 瓮安县| 那曲县| 盘山县| 犍为县| 原平市| 枣强县| 南和县| 嵊泗县| 五原县| 阳谷县| 哈巴河县| 黑山县| 道真| 武冈市| 天水市| 资兴市| 淳化县| 平泉县| 攀枝花市| 永修县| 绥宁县| 江都市| 阳朔县| 赞皇县| 江口县| 福安市| 高雄县| 日喀则市| 铁岭县| 洞口县| 哈密市| 西乡县| 库伦旗|