javascript
SpringDataJpa开发--继承JpaRepository实现简单条件查询
1.Spring Data JPA 是 Spring Data 技術下的子項目,使用Spring Data JPA 訪問數據只需要數據訪問層接口實現JpaRepository接口即可。
2.JpaRepository接口繼承了PagingAndSortingRepository接口,所以也有它的一些功能
3.JpaRepoditory接口提供了很多常用方法:
?
示例:簡單條件查詢
按照Spring Data 的規則,我們可以通過定義在Repository接口下的方法來執行查詢等操作
查詢的方法必須以find、get、read開頭,同時涉及條件查詢時,Spring Data Jpa支持將條件屬性定義在數據訪問層接口下的方法名中
條件屬性通過條件關鍵字連接。
條件屬性的首字母必須大寫
?
①創建一個Maven項目,在src/main下新建一個名為resources的文件夾,修改pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
? <modelVersion>4.0.0</modelVersion>
? <groupId>com.ysh</groupId>
? <artifactId>simplespringdatajpatest</artifactId>
? <version>0.0.1-SNAPSHOT</version>
? <packaging>jar</packaging>
? <name>simplespringdatajpatest</name>
? <url>http://maven.apache.org</url>
? <!--??
??spring-boot-starter-parent是Spring Boot的核心啟動器,
??包含了自動配置、日志和YAML等大量默認的配置,大大簡化了我們的開發。
??引入之后相關的starter引入就不需要添加version配置,
???? spring boot會自動選擇最合適的版本進行添加。
? -->
? <parent>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-parent</artifactId>
??<version>2.0.0.RELEASE</version>
??<relativePath/>
?</parent>
?
?? <properties>
??<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
??<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
??<java.version>1.8</java.version>
?</properties>
? <dependencies>
?
? ?<!-- 添加spring-boot-starter-web模塊依賴 -->
? ?<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-web</artifactId>
?</dependency>
?
? ?<!-- 添加spring-boot-starter-thymeleaf模塊依賴 -->
? ?<dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-thymeleaf</artifactId>
?</dependency>
?
?<!-- 添加MySQL依賴 -->
??? <dependency>
??<groupId>mysql</groupId>
??<artifactId>mysql-connector-java</artifactId>
?</dependency>
???????
???????? <!-- 添加Spring Data JPA依賴 -->
???? <dependency>
??<groupId>org.springframework.boot</groupId>
??<artifactId>spring-boot-starter-data-jpa</artifactId>
?</dependency>
?
??? <dependency>
????? <groupId>junit</groupId>
????? <artifactId>junit</artifactId>
????? <scope>test</scope>
??? </dependency>
? </dependencies>
</project>
②配置基本屬性
在src/main/resources下新建一個全局配置文件,命名為application.properties
#數據庫地址,其中springdatajpa是數據庫名稱
spring.datasource.url=jdbc:mysql://localhost:3306/springdatajpa
#數據庫用戶名
spring.datasource.username=root
#數據庫密碼,要改成自己的密碼
spring.datasource.password=yourpassword
#數據庫驅動,固定格式
spring.datasource.driverClassName=com.mysql.jdbc.Driver
#指定連接池中最大的活躍連接數
spring.datasource.max-active=20
#指定連接池最大的空閑連接
spring.datasource.max-idle=8
#指定必須保持連接的最小值
spring.datasource.min-idle=8
spring.datasource.initial-size=10
########################################################
### JPA持久化配置
########################################################
# 指定數據庫類型
spring.jpa.database= MySQL
# 指定是否需要在日志中顯示sql語句
spring.jpa.show-sql=true
# 指定自動創建|更新|驗證數據庫表結構等配置
# 表示如果數據庫中存在持久化類對應的表就不創建,不存在就創建對應的表
spring.jpa.hibernate.ddl-auto= update
# 指定命名策略
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
#指定數據庫方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
③創建持久化類
在com.ysh下新建4個包,bean(放置持久化類)、controller(控制器)、repository(定義數據訪問接口的類)、service(業務邏輯處理類)
在bean下創建持久化類Student.java
package com.ysh.simplespringdatajpatest.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;
@Entity
@Table(name="tb_student")
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;
?public int getId() {
??return id;
?}
?public void setId(int id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
?public String getAddress() {
??return address;
?}
?public void setAddress(String address) {
??this.address = address;
?}
?public int getAge() {
??return age;
?}
?public void setAge(int age) {
??this.age = age;
?}
?public char getSex() {
??return sex;
?}
?public void setSex(char sex) {
??this.sex = sex;
?}
}
④定義數據訪問層接口
在repository包下新建一個接口,命名為StudentRepository,讓該接口繼承PagingAndSortingRepository
package com.ysh.simplespringdatajpatest.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import com.ysh.simplespringdatajpatest.bean.Student;
public interface StudentRepository extends JpaRepository<Student, Integer> {
?/**
? * 通過學生姓名來查詢學生對象
? * 此方法相當于JPQL語句代碼:select s from Student s where s.name = ?1
? * @param name 參數
? * @return Student對象
? */
?Student findByName(String name);
?
?/**
? * 通過名字和地址查詢學生信息
? * 此方法相當于JPQL語句代碼:select s from Student s where s.name = ?1 and s.address=?2
? * @param name
? * @param address
? * @return 包含Student對象的List集合
? */
?List<Student> findByNameAndAddress(String name , String address);
?
?/**
? * 通過學生姓名模糊查詢學生信息
? * 此方法相當于JPQL語句代碼:select s from Student s where s.name like ?1
? * @param name 參數
? * @return 包含Student對象的List集合
? */
?List<Student> findByNameLike(String name);
?
}
⑤定義業務層類
StudentService.java
package com.ysh.simplespringdatajpatest.service;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.ysh.simplespringdatajpatest.bean.Student;
import com.ysh.simplespringdatajpatest.repository.StudentRepository;
@Service
public class StudentService {
?
?// 注入數據訪問層接口對象
?@Resource
?private StudentRepository studentRepository;
?
?@Transactional
?public void saveAll(List<Student> students) {
??studentRepository.saveAll(students);
?}
?public Student getStuByName(String name) {
??return studentRepository.findByName(name);
?}
?
?public List<Student> getStusByNameAndAddress(String name,String address) {
??return studentRepository.findByNameAndAddress(name,address);
?}
?
?public List<Student> getStusByNameLike(String name) {
??return studentRepository.findByNameLike("%"+name+"%");
?}
}
⑥定義控制器類
在controller包下新建控制器類,命名StudentController
package com.ysh.simplespringdatajpatest.controller;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ysh.simplespringdatajpatest.bean.Student;
import com.ysh.simplespringdatajpatest.service.StudentService;
@RestController
@RequestMapping("/student")
public class StudentController {
?
?// 注入StudentService
?@Resource
?private StudentService studentService;
?
?@RequestMapping("/save")
?public String save() {
??Student swk = new Student();
??swk.setAddress("廣州");
??swk.setName("孫悟空");
??swk.setAge(700);
??swk.setSex('男');
??
??Student zzj = new Student();
??zzj.setAddress("廣州");
??zzj.setName("蜘蛛精");
??zzj.setAge(700);
??zzj.setSex('女');
??
??Student nmw = new Student();
??nmw.setAddress("廣州");
??nmw.setName("牛魔王");
??nmw.setAge(500);
??nmw.setSex('男');
??
??List<Student> students = new ArrayList<>();
??students.add(swk);
??students.add(zzj);
??students.add(nmw);
??
??studentService.saveAll(students);
??return "保存學生對象成功";
?}
?
?@RequestMapping("/name")
?public Student getByName(String name) {
??return studentService.getStuByName(name);
?}
?
?@RequestMapping("/nameAndAddress")
?public List<Student> getByNameAndAddress(String name,String address) {
??return studentService.getStusByNameAndAddress(name, address);
?}
?
?@RequestMapping("/nameLike")
?public List<Student> getByNameLile(String name) {
??return studentService.getStusByNameLike(name);
?}
?
}
⑦測試應用
啟動MySql數據庫,新建數據庫springdatajpa數據庫
新建App.java啟動類
package com.ysh.simplespringdatajpatest;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
?* @SpringBootApplication指定這是一個 spring boot的應用程序.
?*/
@SpringBootApplication
public class App
{
??? public static void main( String[] args )
??? {
??? ?// SpringApplication 用于從main方法啟動Spring應用的類。
??????? SpringApplication.run(App.class, args);
??? }
}
運行項目,JPA會在數據庫中自動創建tb_student表
?
測試添加
瀏覽器中輸入:http://localhost:8080/student/save
查看數據庫
測試根據姓名查詢學生:http://localhost:8080/student/name?name=孫悟空
測試根據姓名和地址查詢學生:
http://localhost:8080/student/name?name=蜘蛛精&address=廣州
測試根據姓名模糊查詢學生:http://localhost:8080/student/nameLike?name=魔王
?
附:
項目目錄
?
項目源碼下載:
https://download.csdn.net/download/badao_liumang_qizhi/10549448
?
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SpringDataJpa开发--继承JpaRepository实现简单条件查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringData核心数据访问接口--
- 下一篇: Tkinter的Scrollba组件