1. 程式人生 > >Spring Data Jpa 學習——偷懶一定要做到極致

Spring Data Jpa 學習——偷懶一定要做到極致

專案中用到了Spring Data Jpa,確實比之前用Hibernate sessionFactory順手很多,大部分的Sql語句都由Spring幫我們自動生成。
之前的應用侷限於Spring Data Jpa的基礎,比如Crud操作,分頁查詢、排序之類。正好今天有空,對其文件仔仔細細的看了一遍,發現還有很多之前遺漏的瑰寶。

SpEl Expression

官方文件中是這樣的:

@Entity
public class User {

  @Id
  @GeneratedValue
  Long id;

  String lastname;
}

public interface
UserRepository extends JpaRepository<User,Long> {
@Query("select u from #{#entityName} u where u.lastname = ?1") List<User> findByLastname(String lastname); }

用#{#entityName} 代替本來實體的名稱,而Spring data jpa會自動根據User實體上對應的@Entity(name = “MyUser”)或者是預設的@Entity,來自動將實體名稱填入hql語句中。

這幫助我解決了專案中很多dao介面的方法除了實體類名稱不同,其他操作都相同的問題。

public interface AnchorGroupDao extends PagingAndSortingRepository<AnchorGroup, Integer>,JpaSpecificationExecutor<AnchorGroup>{

    @Query("update AnchorGroup rule set rule.isEnable=1,rule.lastEnable= NOW() where rule.id= :id")
    @Modifying
    public int enable(@Param("id")int id);

    @Query("update AnchorGroup rule set rule.isEnable=0,rule.lastDisable = NOW() where rule.id= :id "
) @Modifying public int disable(@Param("id")int id); @Query("update AnchorGroup rule set rule.isEnable=0,rule.lastDisable = NOW(),rule.isHistory=1 where rule.id= :id ") @Modifying public int setHistory(@Param("id")int id); }
public interface AnchorRentDao extends PagingAndSortingRepository<AnchorRent, Integer>,JpaSpecificationExecutor<AnchorRent>{

    @Query("update AnchorRent rule set rule.isEnable=1,rule.lastEnable= NOW() where rule.id= :id")
    @Modifying
    public int enable(@Param("id")int id);

    @Query("update AnchorRent rule set rule.isEnable=0,rule.lastDisable = NOW() where rule.id= :id ")
    @Modifying
    public int disable(@Param("id")int id);

    @Query("update AnchorRent rule set rule.isEnable=0,rule.lastDisable = NOW(),rule.isHistory=1 where rule.id= :id ")
    @Modifying
    public int setHistory(@Param("id")int id);
}

這時只要定義一個介面,然後AnchorRentDao、AnchorGroupDao都繼承它既可。
BaseDao.java

@NoRepositoryBean
public interface BaseDao<T extends IdEntity> extends Repository<T, Integer>{

    T save(T t);

    void delete(Integer id);

    public  Iterable<T> save(Iterable<T> entities);

    Page<T> findAll(Specification<T> spec, Pageable pageable);

    T findOne(Integer id);

    void delete(T entity);

}

BaseRuleDao.java

@NoRepositoryBean
public interface BaseRuleDao<T extends IdEntity> extends BaseDao<T>{

    @Query("update #{#entityName} rule set rule.isEnable=1,rule.lastEnable= NOW() where rule.id= :id")
    @Modifying
    public int enable(@Param("id")int id);

    @Query("update #{#entityName} rule set rule.isEnable=0,rule.lastDisable = NOW() where rule.id= :id ")
    @Modifying
    public int disable(@Param("id")int id);

    @Query("update #{#entityName} rule set rule.isEnable=0,rule.lastDisable = NOW(),rule.isHistory=1 where rule.id= :id ")
    @Modifying
    public int setHistory(@Param("id")int id);

}

AnchorGroupDao.java

public interface AnchorGroupDao extends BaseRuleDao<AnchorGroup>{
}

@QueryHint

Stored procedures @Procedure

@Procedure是用於呼叫儲存過程.
引用官網文件中的描述:

/;
DROP procedure IF EXISTS plus1inout
/;
CREATE procedure plus1inout (IN arg int, OUT res int)
BEGIN ATOMIC
 set res = arg ` 1;
END
/;
@Entity
@NamedStoredProcedureQuery(name = "User.plus1", procedureName = "plus1inout", parameters = {
  @StoredProcedureParameter(mode = ParameterMode.IN, name = "arg", type = Integer.class),
  @StoredProcedureParameter(mode = ParameterMode.OUT, name = "res", type = Integer.class) })
public class User {}
@Procedure("plus1inout")
Integer explicitlyNamedPlus1inout(Integer arg);

相關推薦

Spring Data Jpa 學習——偷懶一定做到極致

專案中用到了Spring Data Jpa,確實比之前用Hibernate sessionFactory順手很多,大部分的Sql語句都由Spring幫我們自動生成。 之前的應用侷限於Spring Data Jpa的基礎,比如Crud操作,分頁查詢、排序之類。正

Spring Boot with Spring-Data-JPA學習案例

lookup inter name ali src desc mas driver tex 0x01 什麽是Spring Boot? Spring Boot是用來簡化Spring應用初始搭建以及開發過程的全新框架,被認為是Spring MVC的“接班人”,和微服務緊密聯系

spring data jpa——學習總結

JPA Spring Data 概述 JPA Spring Data : 致力於減少資料訪問層 (DAO) 的開發量. 開發者唯一要做的,就只是宣告持久層的介面,其他都交給 Spring Data JPA 來幫你完成! 框架怎麼可能代替開發者實現業務邏輯呢?比如:當有一個 Us

Spring Data Jpa學習】SimpleJpaRepository原始碼

  // // Source code recreated from a .class file by IntelliJ IDEA // (powered by Fernflower decompiler) // package org.springframework.data.

初入SpringBoot整合Spring-Data-JPA學習

什麼是Spring-Data-JPA 說到Spring-Data-JPA就要先了解一下JPA是什麼? JPA:Java Persistence API(java持久層API),JPA誕生的緣由是為了整合第三方ORM框架,建立一種標準的方式,百度百科說是JDK為

Spring-Data-JPA 學習筆記(一)

作者:zeng1994 一、spring-data-jpa的簡單介紹 SpringData : Spring 的一個子專案。用於簡化資料庫訪問,支援NoSQL 和 關係資料儲存。其主要目標是使資料庫的訪問變得方便快捷。 SpringData

Spring Data JPA學習

Spring Data JPA是在Spring JPA的基礎上,對持久層做了簡化。使用者只需宣告持久層的介面,不需要實現該介面。Spring Data JPA內部會根據不同的策略、通過不同的方法建立Query操作資料庫。 Spring 將 EntityManager 的建立

快速學習Spring Data JPA -- 第七章JPA擴充套件Auditing

xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 整個JPA框架的東西很多,前面的一至六章其實已經可以滿足我們工作中的大部分需求。那麼還有一小部分比較不常用的我們就開始歸納到第七章及後面的

快速學習Spring Data JPA -- 第六章JPA多條件查詢

xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 在Springle Data JPA中,我們看到了JPA由於不需要寫SQL給我們簡化了很多的工作。同時JPA的特性,讓我們對資料層面的操作

快速學習Spring Data JPA -- 第五章JPA多表關聯關係(不建議參考)

xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 關聯關係註解包括@JoinColumn、@OneToOne、@OneToMany、 @ManyToOne、@ManyToMany、@JoinTab

快速學習Spring Data JPA -- 第四章JPA常用註解

xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! JPA常用註解: @Entity、@Table、@Id、@IdClass、 @GeneratedValue、@Basic、@Transient

快速學習Spring Data JPA -- 第三章JPA自定義查詢@Query

xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 其實通過前面兩章,我們不難看出,如果是僅僅按照JPA提供的關鍵詞和定義規則,我們在操作資料庫的時候,會有一定的侷限性。當涉及到比較複雜的資

快速學習Spring Data JPA -- 第二章JAP核心類Repository

xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! 在SpringDataJPA中最為核心的一個類就是Repository,他是SpringData裡面最底層最抽象的介面,最頂級的父類,原碼裡面其方

快速學習Spring Data JPA -- 第一章初始化JPA工程

xl_echo編輯整理,交流學習請加1280023003 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這才是真正的堪稱強大!! Spring Data JPA 可以理解為JPA規範的再次封裝抽象,底層還是使用了Hibernate 的JPA技術實現,引用JPQL(Ja

spring data JPA各種套路深入學習

  基本查詢 基本查詢也分為兩種,一種是spring data預設已經實現,一種是根據查詢的方法來自動解析成SQL。 預先生成方法 spring data jpa 預設預先生成了一些基本的CURD的方法,例如:增、刪、改等等 1 繼承JpaRepository pu

SpringBoot學習筆記10——spring-data-jpa之分頁查詢

今天我們來學習一下spring-data-jpa的分頁查詢的實現 在上次初探JPA之後我們接下來學習分頁查詢,本篇部落格是接上一篇的,如果有需要了解jpa配置的話可以看上一篇部落格https://blog.csdn.net/lp840312696/article/details/83549937

SpringBoot學習筆記09——spring-data-jpa初探

大家對JPA的褒貶不一,如果想弄清楚JPA是什麼、值不值得用大家可以自行百度,博主這裡就不再多說,因為說可能也說不明白,所以話不多說直接講乾貨! 1.引入依賴 下邊是整個dao曾模組的pom檔案,世界上JPA的以來只有一個,已經添加了註釋 <?xml version="1.0" e

SpringBoot學習(三)--構建RESTFUL API並用spring-data-jpa進行儲存&&使用IDEA反向生成帶註釋的例項

構造User物件(/domain),如果有資料庫的表可以直接使用IDEA反向生成例項的類。過程如下: 開啟IDEA:View-ToolWindows-Database。新增資料來源,選擇資料庫型別,輸入資料庫的ip。如果不是預設Windows登陸資料庫,則取消勾選然後填入使用者名稱,密碼。

spring data JPA快速學習

JPA 基本查詢 基本查詢也分為兩種,一種是spring data預設已經實現,一種是根據查詢的方法來自動解析成SQL。 預先生成方法 spring data jpa 預設預先生成了一些基本的CURD的方法,例如:增、刪、改等等 1 繼承JpaRepository

Spring系列學習Spring Data JPA資料訪問

英文原文:https://spring.io/projects/spring-data-jpa   概述 Spring Data JPA是更大的Spring Data系列的一部分,可以輕鬆實現基於JPA的儲存庫。此模組處理對基於JPA的資料訪問層的增強支援。它使構建使用資料訪問