SpringDataJpa开发--继承JpaRepository实现简单条件查询

1.Spring Data JPA 是 Spring Data 技术下的子项目,使用Spring Data JPA 访问数据只需要数据访问层接口实现JpaRepository接口即可。

2.JpaRepository接口继承了PagingAndSortingRepository接口,所以也有它的一些功能

3.JpaRepoditory接口提供了很多常用方法:

SpringDataJpa开发--继承JpaRepository实现简单条件查询

 

示例:简单条件查询

按照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

SpringDataJpa开发--继承JpaRepository实现简单条件查询

查看数据库

SpringDataJpa开发--继承JpaRepository实现简单条件查询

测试根据姓名查询学生:http://localhost:8080/student/name?name=孙悟空

SpringDataJpa开发--继承JpaRepository实现简单条件查询

测试根据姓名和地址查询学生:

http://localhost:8080/student/name?name=蜘蛛精&address=广州

SpringDataJpa开发--继承JpaRepository实现简单条件查询

测试根据姓名模糊查询学生:http://localhost:8080/student/nameLike?name=魔王

SpringDataJpa开发--继承JpaRepository实现简单条件查询

 

附:

项目目录

SpringDataJpa开发--继承JpaRepository实现简单条件查询

 

项目源码下载:

https://download.csdn.net/download/badao_liumang_qizhi/10549448