Spring Data JPA 介绍

Spring Data:其实 Spring Data 就是 spring 提供了一个操作数据的框架。而 Spring Data JPA只是 Spring Data 框架下的一个基于 JPA 标准操作数据的模块。Spring Data JPA:基于 JPA 的标准对数据进行操作。简化操作持久层的代码。只需要编写接口就可以。

1 搭建整合环境




springboot jpa 忽略字段 spring jpa @query_jpa 非主键自增


2修改pom文件配置


springboot jpa 忽略字段 spring jpa @query_jpa 非主键自增_02


springboot jpa 忽略字段 spring jpa @query_springboot jpa 忽略字段_03


3 在项目中添加 application.properties 文件


springboot jpa 忽略字段 spring jpa @query_jpa save返回值_04


4 添加实体类


springboot jpa 忽略字段 spring jpa @query_jpa 非主键自增_05


springboot jpa 忽略字段 spring jpa @query_jpa save返回值_06


5 编写 Dao 接口


springboot jpa 忽略字段 spring jpa @query_jpa分页查询_07


6 在 pom 文件中添加测试启动器的坐标


springboot jpa 忽略字段 spring jpa @query_jpa 非主键自增_08


7 创建启动类


springboot jpa 忽略字段 spring jpa @query_jpa save返回值_09


8 编写测试代码


springboot jpa 忽略字段 spring jpa @query_jpa分页查询_10


springboot jpa 忽略字段 spring jpa @query_jpa分页查询_11


Spring Data JPA 提供的核心接口

1 Repository 接口

2 CrudRepository 接口

3 PagingAndSortingRepository 接口

4 JpaRepository 接口

5 JPASpecificationExecutor 接口

(1) Repository接口的作用是什么?
提供了方法名称命名方式查询、提供了基于注解@query查询与更新

(2) 方法名称命名查询方式的规则是什么?
方法的名称必须要遵循驼峰式命名规则,findBy(关键字)+属性名称(首字母要大写)+查询 条件(首字母大写)

(3) @Query注解的作用是什么?
query可以传递sql、hql语句信息进行查询和更新

(4) @Modifying注解的作用是什么?
表示当前进行的是更新操作

(5) CrudRepository接口的作用是什么?
主要是完成一些增删改查操作

(6) CrudRepository接口的继承结构是什么样的?
crudrepository接口继承repository接口

(7) CrudRepository接口中有哪些常见方法?
save、findall、findone、delete

(8) PagingAndSortingRepository接口的作用是什么?
分页与排序

(9) PagingAndSortingRepository的继承结构是什么样的?
该接口继承了crudrepository接口

(10) PagingAndSortingRepository排序的步骤是什么?
order定义排序规则、创建sort对象封装排序规则、调用接口的save方法,将sort对象信息作为参数执行操作

(11) PagingAndSortingRepository分页的步骤是什么?
创建pageable对象封装分页的参数,将该对象作为参数执行接口的查询更新方法执行操作

(12) JpaRepository接口的作用是什么?
继承pagingandsortingrepository接口,对继承的父接口中的方法的返回值进行适配

(13) JpaRepository继承结构是什么样的?
继承pagingandsortingrepository接口

(14) JPASpecificationExecutor接口的作用是什么?
提供多条件查询的支持,并且可以在查询中添加分页与排序操作

(15) JPASpecificationExecutor接口的继承结构是什么样的?
继承jparepository接口

(16) Specification对象的作用是什么?
用于封装查询条件

(17) @GeneratedValue注解的作用是什么?
提供四种属性值,可以使得主键自增

(18) @ManyToOne注解的作用是什么?
多对一关系

(19) @JoinColumn注解的作用是什么?
维护外键

(20) @ManyToMany注解的作用是什么?
多对多关系

(21) @JoinTable注解的作用是什么?
映射中间表

整合ehcache

1 修改 pom 文件


<!-- Ehcache 坐标 -->
<dependency>
   <groupId>net.sf.ehcache</groupId>
   <artifactId>ehcache</artifactId>
</dependency


2 创建 Ehcache 的配置文件

文件名:ehcache.xml

位置:src/main/resources/ehcache.xml


<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
<diskStore path="java.io.tmpdir"/>
<!--defaultCache:echcache 的默认缓存策略 -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxElementsOnDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap"/>
</defaultCache>
<!-- 自定义缓存策略 -->
<cache name="users"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
maxElementsOnDisk="10000000"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
<persistence strategy="localTempSwap"/>
</cache>
</ehcache>


3 修改 application.properties 文件


spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.cache.ehcache.cofnig=ehcache.xml


4 修改启动类


@SpringBootApplication
@EnableCaching
public class App {
  public static void main(String[] args) {
  SpringApplication.run(App.class, args);
  }
}


5 创建业务层

//@Cacheable:对当前查询的对象做缓存处理

@Cacheable 作用:把方法的返回值添加到 Ehcache 中做缓存

Value 属性:指定一个 Ehcache 配置文件中的缓存策略,如果么有给定 value,name 则表示使用默认的缓存策略

Key 属性:给存储的值起个名称。在查询时如果有名称相同的,那么则知己从缓存中将数据返回

@Cacheable(value="xxx")

6 修改实体类 Users


package com.bjsxt.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="t_users")
public class Users {

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id")
	private Integer id;
	@Column(name="name")
	private String name;
	@Column(name="age")
	private Integer age;
	@Column(name="address")
	private String address;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "Users [id=" + id + ", name=" + name + ", age=" + age + ", address=" + address + "]";
	}
	
	
}


7 测试