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

SpringDataJpa开发--继承JpaRepository实现简单条件查询相关推荐

  1. Django开发实战2-5 模型- 基础条件查询

    Django开发实战2-5 模型-基础条件查询 一.基本查询 1.使用FilmInfo/PeopleInfo.objects.get() 查询fid=2的 数据 2.使用FilmInfo/People ...

  2. MyBatis分组统计查询、多条件查询

    声明一下,本文章基于之前的博客https://blog.csdn.net/Xeon_CC/article/details/107219206 的环境下进行编码,但是不影响童鞋们浏览此文章,毕竟说的是一 ...

  3. SSM米米商城项目笔笔记五(商品信息多条件查询)

    SSM米米商城项目笔笔记五(商品信息多条件查询) 1.当查询的条件没有数据时,点击查询会展示出所有的上商品信息 2.当输入商品的模糊信息时,就会展示带有模糊信息的数据 3.当选中商品类型的时候就根据类 ...

  4. Mybatis Plus 入门 简单的CRUD 使用详解 条件查询 分页查询 DML操作 MP代码生成器

    Mybatis Plus入门 MP是 MybatisPlus,简称MP,是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变.MP为简化开发.提高效率而生. 它已经封装好了 ...

  5. SpringData 简单的条件查询

    今天在写springdata条件查询时,JpaRepository的findOne方法,不知道是因为版本的原因还是其他原因,总是查询不出来数据 //springdata jpa版本为1.5.15,配置 ...

  6. 2019-7-27 [MySQL] DQL 简单查询[别名/去重/运算] 条件查询 排序查询 聚合查询 分组查询 导出与导入 多表操作[一对多/多对多][创外键 创联合主键 约束 添加 删除 测试]

    文章目录 5 SQL语句(DQL) 5.1DQL准备工作和语法 5.1.1准备工作 5.1.2 DQL语法: 5.2 简单查询 5.2.1 查询所有的商品 5.2.2 查询商品名和商品价格. 5.2. ...

  7. springDataJpa入门教程(5)-单表动态条件查询+分页

    springDataJpa入门教程 springDataJpa入门教程(1)-基于springBoot的基本增删改查 springDataJpa入门教程(2)-Specification动态条件查询+ ...

  8. 【示例】solr添加文档/删除文档/简单查询/多条件查询

    solr添加文档/删除文档/简单查询/多条件查询

  9. mysql查询条件_mysql条件查询,最简单的一种,你知道吗?

    在上一篇文章中我们学习了在php中怎样查询数据库中的数据,哪些数据都是直接获取一个表中的所有数据,全部拿过来,没有经过过滤,很多数据对于我们来说暂时是用不上的,这就相当于浪费了带宽,不利于提高数据处理 ...

最新文章

  1. oracle一条sql的执行过程,请问执行一条sql的整个过程是怎样的,谢谢!
  2. FAQ about AJAX-part II
  3. 扇出性 java_索引与算法
  4. 关于位运算的错误问题
  5. 学java_北京Java培训班好吗?去哪儿学
  6. WebLogic中文博客
  7. jQuery——siblings()方法
  8. 飞鸽传书mayfish 数据入库验证
  9. Java案例:词频统计
  10. AttributeError: module 'tensorflow' has no attribute 'Session'
  11. css就近原则_CSS常用总结 - div-import-border - ItBoth
  12. 一个家庭女人太强势,这个家庭会怎样?
  13. java参数传递的乱码问题
  14. C#实现.rar的动态压缩与解压缩
  15. snakeyaml操作yml文件中注释的处理
  16. 即时通信多媒体分享与文件共享
  17. 某站的视频下载与合并,m4s的处理。
  18. 伍伦贡计算机科学硕士申请,伍伦贡大学电脑科学(网络和信息安全)硕士研究生申请要求及申请材料要求清单...
  19. pyinstaler打包paddle
  20. 小白学渗透——渗透测试基本流程

热门文章

  1. mongo 多条件筛选_如何制作提交按钮,实现多条件筛选
  2. python填充空值_Python机器学习(九十一)Pandas 填充(Imputation)空值
  3. 无序数组求第k大的数 python_整数无序数组求第K大数
  4. java调用sql返回list_Hibernate执行原生SQL返回ListMap类型结果集
  5. react 逆地理 高德地图_高德地图又出逆天黑科技!全国各大城市模型直接获取...
  6. css div漂浮向下,DIV+CSS固定底部的漂浮广告
  7. python怎样打开加密的文件_如何在Python中解密OpenSSL AES加密的文件?
  8. arrays中copyof_在内存只有10M的空间中申请一块5M的数组空间,会导致OOM吗?
  9. 多目标粒子群优化算法_基于粒子群优化的投资组合优化研究
  10. tfrecord可以以列表的形式传入多个路径