成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Spring Data JPA 必須掌握的 20+ 個查詢關鍵字

freecode / 1164人閱讀

摘要:前言又是小師弟的投稿,確是一個喜歡技術的朋友。以下為原文今天閑的無聊看官方文檔的時候,發(fā)現(xiàn)并沒有完整的關鍵字語義翻譯。另外,關注之后在發(fā)送可領取免費學習資料。

微信公眾號:一個優(yōu)秀的廢人
如有問題或建議,請后臺留言,我會盡力解決你的問題。
前言

又是小師弟的投稿,確是一個喜歡技術的朋友。以下為原文:

今天閑的無聊看 Spring Data JPA 官方文檔的時候,發(fā)現(xiàn)并沒有完整的 Jpa 關鍵字語義翻譯。所以今天寫了一篇中文文檔,如果有錯誤,望大家輕噴。

以下為官方圖片以及示例代碼和注釋 :

首先參照官方文檔創(chuàng)建指定數(shù)據(jù)庫

CREATE TABLE `demo_jpa`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `last_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `sex` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `email` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `age` int(12) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

示例代碼及注釋<參照以上順序>

/**
 * @Author: EvilSay
 * @Date: 2019/2/25 16:15
 */
public interface DemoJpaRepositories extends JpaRepository {

    //根據(jù)firstName與LastName查找(兩者必須在數(shù)據(jù)庫有)
    DemoJpa findByFirstNameAndLastName(String firstName, String lastName);

    //根據(jù)firstName或LastName查找(兩者其一有就行)
    DemoJpa findByLastNameOrFirstName(String lastName,String firstName);

    //根據(jù)firstName查找它是否存在數(shù)據(jù)庫里<類似與以下關鍵字>
    //DemoJpa findByFirstName(String firstName);
    DemoJpa findByFirstNameIs(String firstName);

    //在Age數(shù)值age到age2之間的數(shù)據(jù)
    List findByAgeBetween(Integer age, Integer age2);

    //小于指定age數(shù)值之間的數(shù)據(jù)
    List findByAgeLessThan(Integer age);

    //小于等于指定age數(shù)值的數(shù)據(jù)
    List findByAgeLessThanEqual(Integer age);

    //大于指定age數(shù)值之間的數(shù)據(jù)
    List findByAgeGreaterThan(Integer age);

    //大于或等于指定age數(shù)值之間的數(shù)據(jù)
    List findByAgeGreaterThanEqual(Integer age);

    //在指定age數(shù)值之前的數(shù)據(jù)類似關鍵字
    List findByAgeAfter(Integer age);

    //在指定age數(shù)值之后的數(shù)據(jù)類似關鍵字
    List  findByAgeBefore(Integer age);

    //返回age字段為空的數(shù)據(jù)
    List findByAgeIsNull();

    //返回age字段不為空的數(shù)據(jù)
    List findByAgeNotNull();

    /**
     * 該關鍵字我一度以為是類似數(shù)據(jù)庫的模糊查詢,
     * 但是我去官方文檔看到它里面并沒有通配符。
     * 所以我覺得它類似
     * DemoJpa findByFirstName(String firstName);
     * @see https://docs.spring.io/spring-data/jpa/docs/2.1.5.RELEASE/reference/html/#jpa.repositories
     */
    DemoJpa findByFirstNameLike(String firstName);

    //同上
    List findByFirstNameNotLike(String firstName);

    //查找數(shù)據(jù)庫中指定類似的名字(如:輸入一個名字"M" Jpa會返回多個包含M開頭的名字的數(shù)據(jù)源)<類似數(shù)據(jù)庫模糊查詢>
    List findByFirstNameStartingWith(String firstName);

    //查找數(shù)據(jù)庫中指定不類似的名字(同上)
    List findByFirstNameEndingWith(String firstName);

    //查找包含的指定數(shù)據(jù)源(這個與以上兩個字段不同的地方在與它必須輸入完整的數(shù)據(jù)才可以查詢)
    List findByFirstNameContaining(String firstName);

    //根據(jù)age選取所有的數(shù)據(jù)源并按照LastName進行升序排序
    List findByAgeOrderByLastName(Integer age);

    //返回不是指定age的所有數(shù)據(jù)
    List findByAgeNot(Integer age);

    //查找包含多個指定age返回的數(shù)據(jù)
    List findByAgeIn(List age);

}

單元測試<已經(jīng)全部通過>

@SpringBootTest
@RunWith(SpringRunner.class)
@Slf4j
public class DemoJpaRepositoriesTest {

    @Autowired
    private DemoJpaRepositories repositories;

    @Test
    public void findByFirstNameAndLastName() {
        DemoJpa demoJpa = repositories.findByFirstNameAndLastName("May", "Eden");
        Assert.assertEquals(demoJpa.getFirstName(),"May");
    }

    @Test
    public void findByLastNameOrFirstName() {
        DemoJpa demoJpa = repositories.findByLastNameOrFirstName("Geordie", "Eden");
        Assert.assertNotEquals(demoJpa.getLastName(),"Eden");
    }

    @Test
    public void findByFirstNameIs() {
        DemoJpa demoJpa = repositories.findByFirstNameIs("amy");
        Assert.assertNull(demoJpa);
    }

    @Test
    public void findByAgeBetween() {
        List demoJpaList = repositories.findByAgeBetween(15, 17);
        Assert.assertEquals(3,demoJpaList.size());
    }

    @Test
    public void findByAgeLessThan() {
        List demoJpaList = repositories.findByAgeLessThan(17);
        Assert.assertEquals(2,demoJpaList.size());
    }

    @Test
    public void findByAgeLessThanEqual() {
        List demoJpaList = repositories.findByAgeLessThanEqual(17);
        Assert.assertEquals(3,demoJpaList.size());
    }

    @Test
    public void findByAgeGreaterThan() {
        List demoJpaList = repositories.findByAgeGreaterThan(17);
        Assert.assertEquals(2,demoJpaList.size());
    }

    @Test
    public void findByAgeGreaterThanEqual() {
        List demoJpaList = repositories.findByAgeGreaterThanEqual(17);
        Assert.assertEquals(3,demoJpaList.size());
    }

    @Test
    public void findByAgeAfter() {
        List demoJpaList = repositories.findByAgeAfter(17);
        Assert.assertEquals(2,demoJpaList.size());
    }

    @Test
    public void findByAgeBefore() {
        List demoJpaList = repositories.findByAgeBefore(17);
        Assert.assertEquals(2,demoJpaList.size());
    }

    @Test
    public void findByAgeIsNull() {
        List demoJpaList = repositories.findByAgeIsNull();
        Assert.assertEquals(0,demoJpaList.size());
    }

    @Test
    public void findByAgeNotNull() {
        List demoJpaList = repositories.findByAgeNotNull();
        Assert.assertEquals(5,demoJpaList.size());
    }

    @Test
    public void findByFirstNameLike() {
        DemoJpa demoJpa = repositories.findByFirstNameLike("May");
        Assert.assertNotNull(demoJpa);
    }

    @Test
    public void findByFirstNameNotLike() {

    }

    @Test
    public void findByFirstNameStartingWith() {
        List demoJpaList = repositories.findByFirstNameStartingWith("May");
        Assert.assertEquals(2,demoJpaList.size());
    }

    @Test
    public void findByFirstNameEndingWith() {
        List demoJpaList = repositories.findByFirstNameEndingWith("Evil");
        Assert.assertEquals(0,demoJpaList.size());
    }

    @Test
    public void findByFirstNameContaining() {
        List demoJpaList = repositories.findByFirstNameContaining("hack");
        Assert.assertEquals(0,demoJpaList.size());
    }

    @Test
    public void findByAgeOrderByLastName() {
        List demoJpaList = repositories.findByAgeOrderByLastName(18);
        for (DemoJpa demoJpaL : demoJpaList){
            log.info("數(shù)據(jù)結(jié)果"+demoJpaL.toString());
        }
    }

    @Test
    public void findByAgeNot() {
        List demoJpaList = repositories.findByAgeNot(20);
        Assert.assertEquals(5,demoJpaList.size());
    }

    @Test
    public void findByAgeIn() {
        List demoJpaList = repositories.findByAgeIn(Arrays.asList(15, 16));
        Assert.assertEquals(2,demoJpaList.size());
    }

}
后語

如果本文對你哪怕有一丁點幫助,請幫忙點好看。你的好看是我堅持寫作的動力。

另外,關注之后在發(fā)送 1024 可領取免費學習資料。資料內(nèi)容詳情請看這篇舊文:Python、C++、Java、Linux、Go、前端、算法資料分享

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73452.html

相關文章

  • 70 Spring 最常見面試題,Java 晉升必會

    摘要:容器自動完成裝載,默認的方式是這部分重點在常用模塊的使用以及的底層實現(xiàn)原理。 對于那些想面試高級 Java 崗位的同學來說,除了算法屬于比較「天方夜譚」的題目外,剩下針對實際工作的題目就屬于真正的本事了,熱門技術的細節(jié)和難點成為了主要考察的內(nèi)容。 這里說「天方夜譚」并不是說算法沒用,不切實際,而是想說算法平時其實很少用到,甚至面試官都對自己出的算法題一知半解。 這里總結(jié)打磨了 70 道...

    Ashin 評論0 收藏0
  • Spring Boot [組件學習-Spring Data JPA]

    摘要:與的關系是什么是官方提出的持久化規(guī)范。它為開發(fā)人員提供了一種對象關聯(lián)映射工具來管理應用中的關系數(shù)據(jù)。他的出現(xiàn)主要是為了簡化現(xiàn)有的持久化開發(fā)工作和整合技術,結(jié)束現(xiàn)在,,等框架各自為營的局面。定義了在對數(shù)據(jù)庫中的對象處理查詢和事務運行時的的。 導讀: 在上篇文章中對Spring MVC常用的一些注解做了簡要的說明,在這篇文章中主要對Spring Data JPA 做一個簡要的說明,并附有一...

    andong777 評論0 收藏0
  • 市長信箱郵件查詢服務: 使用SpringBoot構(gòu)建工程

    摘要:市長信箱郵件查詢服務使用構(gòu)建工程一直想用做個微服務練練手為后續(xù)部署到打下基礎今天比較空閑就開始把部分想法落地了概覽用來練手的應用是一個市長信箱的內(nèi)容抓取與檢索頁面鑒于我的八卦特質(zhì)總想了解下周邊的一些投訴信息而成都的市長信箱是一個絕好的信息來 市長信箱郵件查詢服務: 使用SpringBoot構(gòu)建工程 一直想用SpringBoot做個微服務,練練手, 為后續(xù)部署到docker打下基礎. 今...

    supernavy 評論0 收藏0
  • 數(shù)據(jù)持久化框架Hibernate、JPA、Mybatis、JOOQ和JDBC Template

    摘要:不管是還是,表之間的連接查詢,被映射為實體類之間的關聯(lián)關系,這樣,如果兩個實體類之間沒有實現(xiàn)關聯(lián)關系,你就不能把兩個實體或者表起來查詢。 因為項目需要選擇數(shù)據(jù)持久化框架,看了一下主要幾個流行的和不流行的框架,對于復雜業(yè)務系統(tǒng),最終的結(jié)論是,JOOQ是總體上最好的,可惜不是完全免費,最終選擇JDBC Template。 Hibernate和Mybatis是使用最多的兩個主流框架,而JOO...

    xietao3 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<