Spring Data JPA 介绍
Spring Data:其实 Spring Data 就是 spring 提供了一个操作数据的框架。而 Spring Data JPA只是 Spring Data 框架下的一个基于 JPA 标准操作数据的模块。Spring Data JPA:基于 JPA 的标准对数据进行操作。简化操作持久层的代码。只需要编写接口就可以。
1 搭建整合环境
2修改pom文件配置
3 在项目中添加 application.properties 文件
4 添加实体类
5 编写 Dao 接口
6 在 pom 文件中添加测试启动器的坐标
7 创建启动类
8 编写测试代码
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 测试