摘要:前言又是小師弟的投稿,確是一個(gè)喜歡技術(shù)的朋友。以下為原文今天閑的無聊看官方文檔的時(shí)候,發(fā)現(xiàn)并沒有完整的關(guān)鍵字語義翻譯。另外,關(guān)注之后在發(fā)送可領(lǐng)取免費(fèi)學(xué)習(xí)資料。
微信公眾號(hào):一個(gè)優(yōu)秀的廢人前言
如有問題或建議,請后臺(tái)留言,我會(huì)盡力解決你的問題。
又是小師弟的投稿,確是一個(gè)喜歡技術(shù)的朋友。以下為原文:
今天閑的無聊看 Spring Data JPA 官方文檔的時(shí)候,發(fā)現(xiàn)并沒有完整的 Jpa 關(guān)鍵字語義翻譯。所以今天寫了一篇中文文檔,如果有錯(cuò)誤,望大家輕噴。
以下為官方圖片以及示例代碼和注釋 :
首先參照官方文檔創(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ù)庫里<類似與以下關(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ù)庫的模糊查詢, * 但是我去官方文檔看到它里面并沒有通配符。 * 所以我覺得它類似 * 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ù)庫中指定類似的名字(如:輸入一個(gè)名字"M" Jpa會(huì)返回多個(gè)包含M開頭的名字的數(shù)據(jù)源)<類似數(shù)據(jù)庫模糊查詢> List findByFirstNameStartingWith(String firstName); //查找數(shù)據(jù)庫中指定不類似的名字(同上) 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); }
單元測試<已經(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()); } }
如果本文對你哪怕有一丁點(diǎn)幫助,請幫忙點(diǎn)好看。你的好看是我堅(jiān)持寫作的動(dòng)力。
另外,關(guān)注之后在發(fā)送 1024 可領(lǐng)取免費(fèi)學(xué)習(xí)資料。資料內(nèi)容詳情請看這篇舊文:Python、C++、Java、Linux、Go、前端、算法資料分享
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/73452.html
摘要:容器自動(dòng)完成裝載,默認(rèn)的方式是這部分重點(diǎn)在常用模塊的使用以及的底層實(shí)現(xiàn)原理。 對于那些想面試高級(jí) Java 崗位的同學(xué)來說,除了算法屬于比較「天方夜譚」的題目外,剩下針對實(shí)際工作的題目就屬于真正的本事了,熱門技術(shù)的細(xì)節(jié)和難點(diǎn)成為了主要考察的內(nèi)容。 這里說「天方夜譚」并不是說算法沒用,不切實(shí)際,而是想說算法平時(shí)其實(shí)很少用到,甚至面試官都對自己出的算法題一知半解。 這里總結(jié)打磨了 70 道...
摘要:與的關(guān)系是什么是官方提出的持久化規(guī)范。它為開發(fā)人員提供了一種對象關(guān)聯(lián)映射工具來管理應(yīng)用中的關(guān)系數(shù)據(jù)。他的出現(xiàn)主要是為了簡化現(xiàn)有的持久化開發(fā)工作和整合技術(shù),結(jié)束現(xiàn)在,,等框架各自為營的局面。定義了在對數(shù)據(jù)庫中的對象處理查詢和事務(wù)運(yùn)行時(shí)的的。 導(dǎo)讀: 在上篇文章中對Spring MVC常用的一些注解做了簡要的說明,在這篇文章中主要對Spring Data JPA 做一個(gè)簡要的說明,并附有一...
摘要:市長信箱郵件查詢服務(wù)使用構(gòu)建工程一直想用做個(gè)微服務(wù)練練手為后續(xù)部署到打下基礎(chǔ)今天比較空閑就開始把部分想法落地了概覽用來練手的應(yīng)用是一個(gè)市長信箱的內(nèi)容抓取與檢索頁面鑒于我的八卦特質(zhì)總想了解下周邊的一些投訴信息而成都的市長信箱是一個(gè)絕好的信息來 市長信箱郵件查詢服務(wù): 使用SpringBoot構(gòu)建工程 一直想用SpringBoot做個(gè)微服務(wù),練練手, 為后續(xù)部署到docker打下基礎(chǔ). 今...
摘要:不管是還是,表之間的連接查詢,被映射為實(shí)體類之間的關(guān)聯(lián)關(guān)系,這樣,如果兩個(gè)實(shí)體類之間沒有實(shí)現(xiàn)關(guān)聯(lián)關(guān)系,你就不能把兩個(gè)實(shí)體或者表起來查詢。 因?yàn)轫?xiàng)目需要選擇數(shù)據(jù)持久化框架,看了一下主要幾個(gè)流行的和不流行的框架,對于復(fù)雜業(yè)務(wù)系統(tǒng),最終的結(jié)論是,JOOQ是總體上最好的,可惜不是完全免費(fèi),最終選擇JDBC Template。 Hibernate和Mybatis是使用最多的兩個(gè)主流框架,而JOO...
閱讀 1123·2021-11-18 10:02
閱讀 1376·2021-09-23 11:22
閱讀 2687·2021-08-21 14:08
閱讀 1705·2019-08-30 15:55
閱讀 1790·2019-08-30 13:45
閱讀 3310·2019-08-29 16:52
閱讀 3162·2019-08-29 12:18
閱讀 1707·2019-08-26 13:36