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

SpringData JPA中查詢接口Repository的使用

 更新時間:2023年07月26日 09:11:33   作者:程序員三時  
本文主要介紹了SpringData JPA中查詢接口Repository的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

什么是JPA

SpringData是Spring提供的一個數(shù)據(jù)操作框架,而SpringData JPA則是該框架下基于JPA標(biāo)準(zhǔn)進(jìn)行數(shù)據(jù)操作的模塊。

SpringData JPA簡化了持久層代碼的操作,只需編寫接口即可實(shí)現(xiàn)。

JPA,全稱Java Persistence API,是Spring Data的子項目之一。它是JDK 5.0的注解或XML描述對象與關(guān)系表映射關(guān)系的工具,可以將運(yùn)行時的實(shí)體對象持久化到數(shù)據(jù)庫中。

JPA和Mybatis都是持久層框架,具有相同的功能。然而,由于Mybatis的廣泛使用,現(xiàn)在了解和使用JPA的人較少。

JPQL 是從 Hibernate 的 HQL 演變而來的,其語法與 HQL 非常相似。HQL,即 Hibernate Query Language(Hibernate查詢語言),而 SQL 是 Structure Query Language(結(jié)構(gòu)化查詢語言)。

它們的主要區(qū)別在于:SQL 直接操作數(shù)據(jù)庫中的表和字段,而 HQL 則操作實(shí)體對象和屬性。

需要注意的是,我們編寫的 JPQL 最終仍會被轉(zhuǎn)換成 SQL 語句進(jìn)行執(zhí)行。

接口繼承關(guān)系

Repository<T, ID>接口 最頂層接口 作用自定義JPQL語句

/**
 * 使用@Query注解,自定義JPQL語句
 * JPQL語句中,使用的不是表名,而是實(shí)體類名,不是列名,而是屬性名,
 * 例如SQL語句:select * from user  JPQL語句是:select User from User
 * 如果是條件查詢,之前語句中的占位符?可以使用(:xxx)進(jìn)行表示
 * 此時xxx會根據(jù)方法中同名的形參自動綁定值
 */
public interface UsersRepositoryByQuery extends Repository<User, Integer> {
    //如果是查詢所有列,可以省略select ....,從from開始寫
    @Query("from User where name=:name")
    List<User> selectByName(String name); //select * from user where name=?
    @Query("select u from User u where name=:name and age=:age")
    List<User> selectByNameAndAge(String name, Integer age); //select * from user where name=? and age=?
    @Query("from User where name=:name and age=:age")
    List<User> selectByNameLike(String name);//select * from user  where name like ?
    //除了使用JPQL語句,也是可以使用sql原生語句,在注解中設(shè)置參數(shù)nativeQuery = true,不推薦!
    @Query(value = "select * from user where name=:name",nativeQuery = true)
    List<User> selectByNameSQl(String name);//select * from user where name=?
}

CrudRepository接口 繼承了Repository接口,內(nèi)置類增刪改查的方法

PagingAndSortingRepository接口繼承了CrudRepository接口增加了分頁和排序方法

 @Autowired
    private UserRepositoryPage userRepositoryPage;
    /**
     * 分頁
     */
    @Test
    void testPage(){
        //第一個參數(shù)是頁碼數(shù),0表示第一頁;第二參數(shù)是分頁單位;
        Pageable Pageable = PageRequest.of(0, 2);
        Page<User> page = userRepositoryPage.findAll(Pageable);
        System.out.println("總數(shù)據(jù)量"+page.getTotalElements());
        System.out.println("總頁數(shù)"+page.getTotalPages());
        List<User> content = page.getContent();
        for (User user : content) {
            System.out.println(user);
        }
    }
    /**
     * 排序
     */
    @Test
    void testSort(){
        //根據(jù)id排序
        Sort sort = Sort.by(Sort.Order.desc("id"));
        Iterable<User> all = userRepositoryPage.findAll(sort);
        for (User user : all) {
            System.out.println(user);
        }
    }

JpaRepository<T, ID> 接口

繼承了 PagingAndSortingRepository<T, ID>

和查詢接口 QueryByExampleExecutor

特點(diǎn)是可以幫助我們將其他接口的方法的返回值做適配處理??梢允沟梦覀冊陂_發(fā)時更方便的使用這些方法

JpaSpecificationExecutor 接口 主要提供了多條件查詢的支持,并且可以在查詢中添加分頁與排序

JpaSpecificationExecutor接口與以上接口沒有關(guān)系,完全獨(dú)立。不能單獨(dú)使用,需要配合著JPA 中的其他接口一起使用。

//接口  
public interface UserRepositoryExJPA extends JpaRepository<User,Integer>,JpaSpecificationExecutor<User> {
}
//使用  
@Autowired
    private UserRepositoryExJPA userRepositoryExJPA;
    /**
     * 自定義規(guī)則,可以多條件查詢
     */
    @Test
    void testExJPA2() {
        Specification<User> specification = new Specification<User>() {
            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
                //模糊查詢
                Predicate predicate = criteriaBuilder.like(root.get("name"), "張%");
                //模糊查詢+性別篩選+年齡篩選
                Predicate predicate2 = criteriaBuilder.and(criteriaBuilder.like(root.get("name"), "張%"),
                        criteriaBuilder.equal(root.get("sex"), "男"), criteriaBuilder.gt(root.get("age"), 24));
                return predicate2;
            }
        };
        //進(jìn)行排序年齡進(jìn)行倒序排列
        Sort sort = Sort.by(Sort.Order.desc("age"));
        //分頁+追加排序
        Pageable pageable = PageRequest.of(0, 2, sort);
        Page<User> page = userRepositoryExJPA.findAll(specification, pageable);
        System.out.println("根據(jù)條件查詢到" + page.getTotalElements() + "條數(shù)據(jù)");
        System.out.println("根據(jù)條件查詢到" + page.getTotalPages() + "頁數(shù)據(jù)");
        System.out.println("當(dāng)頁數(shù)據(jù)");
        for (User user : page) {
            System.out.println(user);
        }
    }  

JpaRepositoryImplementation<T, ID> 接口

繼承了 JpaRepository<T, ID>, JpaSpecificationExecutor 接口

實(shí)現(xiàn)類為SimpleJpaRepository<T, ID> 接口 功能最強(qiáng)大

關(guān)鍵命名查詢

根據(jù) Spring Data 的規(guī)范,查詢方法應(yīng)以 find、read 或 get 開頭(例如 find、findBy、read、readBy、get、getBy)。當(dāng)涉及到查詢條件時,應(yīng)使用條件關(guān)鍵字連接屬性,并確保條件屬性的首字母大寫。在解析方法名時,框架會先去除多余的前綴,然后對剩余部分進(jìn)行解析。

你可以直接在接口中定義查詢方法,只要符合規(guī)范,就無需編寫實(shí)現(xiàn)或 SQL。目前支持的關(guān)鍵字寫法如下:

到此這篇關(guān)于SpringData JPA中查詢接口Repository的使用的文章就介紹到這了,更多相關(guān)SpringData JPA Repository內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細(xì)步驟

    SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細(xì)步驟

    Spring Boot是一個開源的Java框架,它簡化了基于Spring的應(yīng)用程序的開發(fā)和部署,HikariCP是一個高性能的Java數(shù)據(jù)庫連接池,被廣泛應(yīng)用于Java開發(fā)領(lǐng)域,它是目前最快和最輕量級的連接池之一,本文介紹了SpringBoot配置Hikari數(shù)據(jù)庫連接池的詳細(xì)步驟,需要的朋友可以參考下
    2024-08-08
  • Java實(shí)現(xiàn)簡單的模板渲染

    Java實(shí)現(xiàn)簡單的模板渲染

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單的模板渲染的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Java線程狀態(tài)及同步鎖的操作方法

    Java線程狀態(tài)及同步鎖的操作方法

    Java中的thread類自帶有線程的一些方法,這些方法可以讓線程睡眠,插隊,提高線程調(diào)度的優(yōu)先級等等,它們提供了改變線程狀態(tài)的操作手段,這篇文章主要介紹了Java線程狀態(tài)及同步鎖,需要的朋友可以參考下
    2021-11-11
  • classloader類加載器_基于java類的加載方式詳解

    classloader類加載器_基于java類的加載方式詳解

    下面小編就為大家?guī)硪黄猚lassloader類加載器_基于java類的加載方式詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 深入了解Java Object類的使用

    深入了解Java Object類的使用

    java繼承中說到的Object類是java中一個特殊的類,所有的類都是直接或者間接的繼承自O(shè)bject類。本文就和大家詳細(xì)講講Java Object類的使用,感興趣的可以了解一下
    2022-07-07
  • Spring Boot和Hazelcast使用詳解

    Spring Boot和Hazelcast使用詳解

    這篇文章主要介紹了Spring Boot和Hazelcast使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-09-09
  • tomcat目錄結(jié)構(gòu)簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    tomcat目錄結(jié)構(gòu)簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了tomcat目錄結(jié)構(gòu)簡介_動力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • Spring IoC容器常見獲取Bean的方式匯總示例解析

    Spring IoC容器常見獲取Bean的方式匯總示例解析

    這篇文章主要為大家介紹了Spring IoC容器常見獲取Bean的方式匯總示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • SpringBoot整合Zookeeper詳細(xì)教程

    SpringBoot整合Zookeeper詳細(xì)教程

    Curator是Netflix公司開源的?套zookeeper客戶端框架,Curator是對Zookeeper?持最好的客戶端框架。Curator封裝了?部分Zookeeper的功能,?如Leader選舉、分布式鎖等,減少了技術(shù)?員在使?Zookeeper時的底層細(xì)節(jié)開發(fā)?作
    2022-12-12
  • SpringBoot+MyBatisPlus對Map中Date格式轉(zhuǎn)換處理的方法詳解

    SpringBoot+MyBatisPlus對Map中Date格式轉(zhuǎn)換處理的方法詳解

    在?SpringBoot?項目中,?如何統(tǒng)一?JSON?格式化中的日期格式。本文將為大家介紹一種方法:利用MyBatisPlus實(shí)現(xiàn)對Map中Date格式轉(zhuǎn)換處理,需要的可以參考一下
    2022-10-10

最新評論

武平县| 小金县| 双柏县| 孟州市| 油尖旺区| 连山| 会东县| 香河县| 衢州市| 尼勒克县| 台北市| 内丘县| 高清| 富宁县| 潞城市| 瑞昌市| 竹溪县| 广昌县| 萝北县| 客服| 景东| 阳信县| 繁峙县| 永年县| 舞阳县| 黄浦区| 石林| 通山县| 乌兰浩特市| 安化县| 西乌珠穆沁旗| 凤城市| 安阳县| 平罗县| 台州市| 曲松县| 法库县| 盐城市| 寻乌县| 锦屏县| 黑河市|