微信公衆號:一個優秀的廢人 若有問題或建議,請後臺留言,我會盡力解決你的問題。html
又是小師弟的投稿,確是一個喜歡技術的朋友。如下爲原文:前端
今天閒的無聊看 Spring Data JPA 官方文檔的時候,發現並無完整的 Jpa 關鍵字語義翻譯。因此今天寫了一篇中文文檔,若是有錯誤,望你們輕噴。java
如下爲官方圖片以及示例代碼和註釋 :算法
首先參照官方文檔建立指定數據庫spring
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;
複製代碼
示例代碼及註釋<參照以上順序>sql
/** * @Author: EvilSay * @Date: 2019/2/25 16:15 */
public interface DemoJpaRepositories extends JpaRepository<DemoJpa,Integer> {
//根據firstName與LastName查找(二者必須在數據庫有)
DemoJpa findByFirstNameAndLastName(String firstName, String lastName);
//根據firstName或LastName查找(二者其一有就行)
DemoJpa findByLastNameOrFirstName(String lastName,String firstName);
//根據firstName查找它是否存在數據庫裏<相似與如下關鍵字>
//DemoJpa findByFirstName(String firstName);
DemoJpa findByFirstNameIs(String firstName);
//在Age數值age到age2之間的數據
List<DemoJpa> findByAgeBetween(Integer age, Integer age2);
//小於指定age數值之間的數據
List<DemoJpa> findByAgeLessThan(Integer age);
//小於等於指定age數值的數據
List<DemoJpa> findByAgeLessThanEqual(Integer age);
//大於指定age數值之間的數據
List<DemoJpa> findByAgeGreaterThan(Integer age);
//大於或等於指定age數值之間的數據
List<DemoJpa> findByAgeGreaterThanEqual(Integer age);
//在指定age數值以前的數據相似關鍵字<LessThan>
List<DemoJpa> findByAgeAfter(Integer age);
//在指定age數值以後的數據相似關鍵字<GreaterThan>
List<DemoJpa> findByAgeBefore(Integer age);
//返回age字段爲空的數據
List<DemoJpa> findByAgeIsNull();
//返回age字段不爲空的數據
List<DemoJpa> findByAgeNotNull();
/** * 該關鍵字我一度覺得是相似數據庫的模糊查詢, * 可是我去官方文檔看到它裏面並無通配符。 * 因此我以爲它相似 * 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<DemoJpa> findByFirstNameNotLike(String firstName);
//查找數據庫中指定相似的名字(如:輸入一個名字"M" Jpa會返回多個包含M開頭的名字的數據源)<相似數據庫模糊查詢>
List<DemoJpa> findByFirstNameStartingWith(String firstName);
//查找數據庫中指定不相似的名字(同上)
List<DemoJpa> findByFirstNameEndingWith(String firstName);
//查找包含的指定數據源(這個與以上兩個字段不一樣的地方在與它必須輸入完整的數據才能夠查詢)
List<DemoJpa> findByFirstNameContaining(String firstName);
//根據age選取全部的數據源並按照LastName進行升序排序
List<DemoJpa> findByAgeOrderByLastName(Integer age);
//返回不是指定age的全部數據
List<DemoJpa> findByAgeNot(Integer age);
//查找包含多個指定age返回的數據
List<DemoJpa> findByAgeIn(List<Integer> age);
}
複製代碼
單元測試<已經所有經過>數據庫
@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<DemoJpa> demoJpaList = repositories.findByAgeBetween(15, 17);
Assert.assertEquals(3,demoJpaList.size());
}
@Test
public void findByAgeLessThan() {
List<DemoJpa> demoJpaList = repositories.findByAgeLessThan(17);
Assert.assertEquals(2,demoJpaList.size());
}
@Test
public void findByAgeLessThanEqual() {
List<DemoJpa> demoJpaList = repositories.findByAgeLessThanEqual(17);
Assert.assertEquals(3,demoJpaList.size());
}
@Test
public void findByAgeGreaterThan() {
List<DemoJpa> demoJpaList = repositories.findByAgeGreaterThan(17);
Assert.assertEquals(2,demoJpaList.size());
}
@Test
public void findByAgeGreaterThanEqual() {
List<DemoJpa> demoJpaList = repositories.findByAgeGreaterThanEqual(17);
Assert.assertEquals(3,demoJpaList.size());
}
@Test
public void findByAgeAfter() {
List<DemoJpa> demoJpaList = repositories.findByAgeAfter(17);
Assert.assertEquals(2,demoJpaList.size());
}
@Test
public void findByAgeBefore() {
List<DemoJpa> demoJpaList = repositories.findByAgeBefore(17);
Assert.assertEquals(2,demoJpaList.size());
}
@Test
public void findByAgeIsNull() {
List<DemoJpa> demoJpaList = repositories.findByAgeIsNull();
Assert.assertEquals(0,demoJpaList.size());
}
@Test
public void findByAgeNotNull() {
List<DemoJpa> 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<DemoJpa> demoJpaList = repositories.findByFirstNameStartingWith("May");
Assert.assertEquals(2,demoJpaList.size());
}
@Test
public void findByFirstNameEndingWith() {
List<DemoJpa> demoJpaList = repositories.findByFirstNameEndingWith("Evil");
Assert.assertEquals(0,demoJpaList.size());
}
@Test
public void findByFirstNameContaining() {
List<DemoJpa> demoJpaList = repositories.findByFirstNameContaining("hack");
Assert.assertEquals(0,demoJpaList.size());
}
@Test
public void findByAgeOrderByLastName() {
List<DemoJpa> demoJpaList = repositories.findByAgeOrderByLastName(18);
for (DemoJpa demoJpaL : demoJpaList){
log.info("數據結果"+demoJpaL.toString());
}
}
@Test
public void findByAgeNot() {
List<DemoJpa> demoJpaList = repositories.findByAgeNot(20);
Assert.assertEquals(5,demoJpaList.size());
}
@Test
public void findByAgeIn() {
List<DemoJpa> demoJpaList = repositories.findByAgeIn(Arrays.asList(15, 16));
Assert.assertEquals(2,demoJpaList.size());
}
}
複製代碼
若是本文對你哪怕有一丁點幫助,請幫忙點好看。你的好看是我堅持寫做的動力。微信
另外,關注以後在發送 1024 可領取免費學習資料。資料內容詳情請看這篇舊文:Python、C++、Java、Linux、Go、前端、算法資料分享單元測試