精通 Spring Boot 系列 08
閱讀全文,約 9 分鐘

這是江帥帥的第010篇原創(chuàng)
Spring Data JPA
使用:將數(shù)據(jù)訪問層接口實現(xiàn) JpaRepository 接口即可完成 Spring Data JPA 訪問數(shù)據(jù)。
JpaRepository 極大簡化了 JPA 作為數(shù)據(jù)訪問的代碼。
今天給大家介紹幾個案例:
簡單條件查詢
關(guān)聯(lián)查詢和 @Query 查詢
@NamedQuery 查詢
Specification 查詢
案例1:簡單條件的查詢
1)編輯 pom.xml 文件(與 CrudRepository 接口案例一樣)
2)編輯 application.properties 文件(與 CrudRepository 接口案例一樣)
3)創(chuàng)建 Student 持久化類
package?nx.bean;
import?java.io.Serializable;
import?javax.persistence.Entity;
import?javax.persistence.GeneratedValue;
import?javax.persistence.GenerationType;
import?javax.persistence.Id;
import?javax.persistence.Table;
//?學(xué)生
@Entity
@Table(name="tb_student")?//?學(xué)生表
public?class?Student?implements?Serializable{
????private?static?final?long?serialVersionUID?=?1L;
????@Id
????@GeneratedValue(strategy?=?GenerationType.IDENTITY)
????private?int?id;?
????private?String?name?;?//?名字
????private?String?address?;?//?地址
????private?int?age?;?//?年齡
????private?char?sex;?//?性別
????//?getXxx?&?setXxx?方法
}
4)創(chuàng)建 StudentRepository 數(shù)據(jù)訪問接口
package?nx.repository;
import?java.util.List;
import?nx.bean.Student;
import?org.springframework.data.jpa.repository.JpaRepository;
public?interface?StudentRepository?extends?JpaRepository<Student,?Integer>?{
????/**
?????*?通過學(xué)生姓名來查詢學(xué)生對象
?????*?此方法相當(dāng)于JPQL語句代碼
?????*?select?s?from?Student?s?where?s.name?=??1
?????*/
????Student?findByName(String?name);
????/**
?????*?通過名字和地址查詢學(xué)生信息
?????*?此方法相當(dāng)于JPQL語句代碼
?????*?select?s?from?Student?s?where?s.name?=??1?and?s.address=?2
?????*/
????List?findByNameAndAddress(String?name?,?String?address) ;
????/**
?????*?通過學(xué)生姓名模糊查詢學(xué)生信息?
?????*?此方法相當(dāng)于JPQL語句代碼
?????*?select?s?from?Student?s?where?s.name?like??1
?????*/
????List?findByNameLike(String?name) ;
}
5)創(chuàng)建 StudentService 業(yè)務(wù)層類
package?nx.service;
import?java.util.List;
import?javax.annotation.Resource;
import?nx.bean.Student;
import?nx.repository.StudentRepository;
import?org.springframework.stereotype.Service;
import?org.springframework.transaction.annotation.Transactional;
@Service
public?class?StudentService?{
????//?注入數(shù)據(jù)訪問層接口對象?
????@Resource
????private?StudentRepository?studentRepository;
????//?保存所有
????@Transactional
????public?void?saveAll(List?students) ?{
????????studentRepository.saveAll(students);
????}
????//?根據(jù)名字查找
????public?Student?getStuByName(String?name)?{
????????return?studentRepository.findByName(name);
????}
????//?根據(jù)名字和地址查找
????public?List?getStusByNameAndAddress(String?name,String?address)? {
????????return?studentRepository.findByNameAndAddress(name,address);
????}
????//?根據(jù)名字模糊查詢
????public?List?getStusByNameLike(String?name)? {
????????return?studentRepository.findByNameLike("%"+name+"%");
????}
}
6)創(chuàng)建 StudentController 控制器類
package?nx.controller;
import?java.util.ArrayList;
import?java.util.List;
import?javax.annotation.Resource;
import?nx.bean.Student;
import?nx.service.StudentService;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/student")
public?class?StudentController?{
????//?注入StudentService
????@Resource
????private?StudentService?studentService;
????@RequestMapping("/save")
????public?String?save()?{
????????Student?s1?=?new?Student();
????????s1.setAddress("廣州");
????????s1.setName("帥帥");
????????s1.setAge(18);
????????s1.setSex('男');
????????Student?s2?=?new?Student();
????????s2.setAddress("廣州");
????????s2.setName("花花");
????????s2.setAge(17);
????????s2.setSex('女');
????????List?students?=?new?ArrayList<>();
????????students.add(s1);
????????students.add(s2);
????????studentService.saveAll(students);
????????return?"保存student對象成功";
????}
????@RequestMapping("/name")
????public?Student?getByName(String?name)?{
????????return?studentService.getStuByName(name);
????}
????@RequestMapping("/nameAndAddress")
????public?List?getByNameAndAddress(String?name,String?address)? {
????????return?studentService.getStusByNameAndAddress(name,?address);
????}
????@RequestMapping("/nameLike")
????public?List?getByNameLile(String?name)? {
????????return?studentService.getStusByNameLike(name);
????}???
}
7)訪問測試
http://localhost:8080/student/nameLike?name=帥

來源公眾號:江帥帥(ID:NXJSS666)
更多精彩?
在公眾號【程序員編程】對話框輸入以下關(guān)鍵詞 查看更多優(yōu)質(zhì)內(nèi)容! 大數(shù)據(jù)?|?Java?|?1024?|?電子書?|?速查表? Python進(jìn)階?|?面試?|?手冊?|?成神?|?思想?|?小程序 命令行?|?人工智能?|?軟件測試?|?Web前端?|?Python 獲取更多學(xué)習(xí)資料
視頻 |?面試 |?技術(shù) | 電子書
評論
圖片
表情
