成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Spring Data JPA 必須掌握的 20+ 個(gè)查詢關(guān)鍵字

freecode / 1218人閱讀

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

微信公眾號(hào):一個(gè)優(yōu)秀的廢人
如有問(wèn)題或建議,請(qǐng)后臺(tái)留言,我會(huì)盡力解決你的問(wèn)題。
前言

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

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

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

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

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ù)庫(kù)有)
    DemoJpa findByFirstNameAndLastName(String firstName, String lastName);

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

    //根據(jù)firstName查找它是否存在數(shù)據(jù)庫(kù)里<類似與以下關(guān)鍵字>
    //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ù)類似關(guān)鍵字
    List findByAgeAfter(Integer age);

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

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

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

    /**
     * 該關(guān)鍵字我一度以為是類似數(shù)據(jù)庫(kù)的模糊查詢,
     * 但是我去官方文檔看到它里面并沒(méi)有通配符。
     * 所以我覺(jué)得它類似
     * 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ù)庫(kù)中指定類似的名字(如:輸入一個(gè)名字"M" Jpa會(huì)返回多個(gè)包含M開頭的名字的數(shù)據(jù)源)<類似數(shù)據(jù)庫(kù)模糊查詢>
    List findByFirstNameStartingWith(String firstName);

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

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

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

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

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

}

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

@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());
    }

}
后語(yǔ)

如果本文對(duì)你哪怕有一丁點(diǎn)幫助,請(qǐng)幫忙點(diǎn)好看。你的好看是我堅(jiān)持寫作的動(dòng)力。

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/73452.html

相關(guān)文章

  • 70 個(gè) Spring 最常見面試題,Java 晉升必會(huì)

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

    Ashin 評(píng)論0 收藏0
  • Spring Boot [組件學(xué)習(xí)-Spring Data JPA]

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

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

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

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

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

    xietao3 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<