1. SpringBoot整合Spring Data JPA步骤-(上)

(1)创建一个Maven的jar工程。

spring data jpa mongodb 设置数据过期清除 spring data jpa 缓存_Data

(2)修改POM文件添加Web启动器,Thymeleaf启动器,Spring Data JPA启动器坐标。

<!-- springBoot的启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- springDataJPA的启动器 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

(3)修改POM文件添加MySQL数据库、数据库连接池坐标。

<!-- mysql 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid 数据库连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.10</version>
</dependency>

(4)修改全局配置文件,添加数据库配置、连接池配置、JPA正向工程配置,显示SQL语句配置。

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/ssm?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
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

2.SpringBoot整合Spring Data JPA步骤-(下)

(1)创建Users实体类,包含id、name、age、address属性,其中id为主键。

@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;

(2)创建Dao接口继承JpaRepository接口。

spring data jpa mongodb 设置数据过期清除 spring data jpa 缓存_JPA_02

(3)在工程中添加测试启动器。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)

(4)创建启动类。

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

(5)编写测试代码使用正向工程创建表,并在表中插入一条数据。

spring data jpa mongodb 设置数据过期清除 spring data jpa 缓存_JPA_03

3.SpringBoot整合Spring Data JPA-Repository接口使用

(1)在Spring Data JPA中提供了几个核心接口?

1 Repository 接口
2 CrudRepository 接口
3 PagingAndSortingRepository 接口
4 JpaRepository 接口
5 JPASpecificationExecutor

(2)Repository接口的作用是什么?

提供了方法名称命名查询方式
提供了基于@Query 注解查询与更新

(3)方法名称命名查询方式的规则是什么?

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

(4)@Query注解的作用是什么?

(5)@Modifying注解的作用是什么?

表示该语句需要执行一个更新操作

4.SpringBoot整合Spring Data JPA-CrudRepository接口使用

(1)CrudRepository接口的作用是什么?

完成一些增删改查操作

(2)CrudRepository接口的继承结构是什么样的?

spring data jpa mongodb 设置数据过期清除 spring data jpa 缓存_JPA_04

(3)CrudRepository接口中有哪些常见方法?

spring data jpa mongodb 设置数据过期清除 spring data jpa 缓存_Data_05

5.SpringBoot整合Spring Data JPA-PagingAndSortingRepository接口使用

(1)PagingAndSortingRepository接口的作用是什么?

对数据进行分页或者排序操作

(2)PagingAndSortingRepository的继承结构是什么样的?

spring data jpa mongodb 设置数据过期清除 spring data jpa 缓存_JPA_06

(3)PagingAndSortingRepository排序的步骤是什么?

//排序测试
@Test
public void testPagingAndSortingRepositorySort(){
    Sort sort=Sort.by(Sort.Direction.DESC,"id");
    List<Users> list = (List<Users>) usersRepositoryPagingAndSorting.findAll(sort);
    for (Users users:list){
        System.out.println(users);
    }
}

(4)PagingAndSortingRepository分页的步骤是什么?

//分页测试
@Test
public void testPagingAndSortingRepositoryPage(){
    Pageable pageable= PageRequest.of(0,2);
    Page<Users> page = usersRepositoryPagingAndSorting.findAll(pageable);
    System.out.println("总条数:"+page.getTotalElements());
    System.out.println("总页数:"+page.getTotalPages());
    List<Users> list = page.getContent();
    for (Users users:list){
        System.out.println(users);
    }
}

6.SpringBoot整合Spring Data JPA-JpaRepository接口使用

(1)JpaRepository接口的作用是什么?

对继承的父接口中的方法的返回值做适配

(2)JpaRepository继承结构是什么样的?

spring data jpa mongodb 设置数据过期清除 spring data jpa 缓存_spring_07

7.Spring Data JPA-JPASpecificationExecutor接口使用

(1)JPASpecificationExecutor接口的作用是什么?

该接口主要是提供了多条件查询的支持,并且可以在查询中添加分页与排序 。 注意 :JPASpecificationExecutor 是单独存在,完全独立。

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

public interface UsersRepositorySpecification extends 
JpaRepository<Users,Integer>, JpaSpecificationExecutor<Users> {
}

(3)Specification对象的作用是什么?

用于封装查询条件

8.SpringBoot整合Spring Data JPA-建立双向一对多关联映射

(1)@GeneratedValue注解的作用是什么?

设置主键的属性

(2)@ManyToOne注解的作用是什么?

级联关系,一对多

(3)@JoinColumn注解的作用是什么?

设置该属性在数据库中为外键

9.SpringBoot整合Spring Data JPA-建立双向多对多关联映射

(1)@ManyToMany注解的作用是什么?

级联关系,多对多

(2)@JoinTable注解的作用是什么?

设置多对多的中间表

(3)创建一个菜单实体,包含menusid、menusname、menusurl、fatherid属性,与Roles为多对多关联关系,一个角色可以拥有多个菜单,一个菜单可以分配个多个角色。

package com.bjsxt.pojo;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "t_menus")
public class Menus {
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "menusId")
    private Integer menusId;
    @Column(name = "name")
    private String   name;
    @Column(name = "url")
    private  String url;
    @Column(name = "fatherId")
    private  Integer  fatherId;
   @ManyToMany(mappedBy = "menus")
    private Set<Roles> roles=new HashSet<>();

    public Integer getMenusId() {
        return menusId;
    }

    public void setMenusId(Integer menusId) {
        this.menusId = menusId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public Integer getFatherId() {
        return fatherId;
    }

    public void setFatherId(Integer fatherId) {
        this.fatherId = fatherId;
    }

    public Set<Roles> getRoles() {
        return roles;
    }

    public void setRoles(Set<Roles> roles) {
        this.roles = roles;
    }
}

package com.bjsxt.pojo;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
@Table(name = "t_roles")
public class Roles {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "roleId")
    private  Integer roleId;
    @Column(name = "roleName")
    private String roleName;
    @ManyToMany(cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
    @JoinTable(name = "t_menus_roles",
            joinColumns = @JoinColumn(name = "menus_id"),inverseJoinColumns = @JoinColumn(name ="roles_id" ))
    private Set<Menus> menus=new HashSet<>();
    public Integer getRoleId() {
        return roleId;
    }

    public void setRoleId(Integer roleId) {
        this.roleId = roleId;
    }

    public String getRoleName() {
        return roleName;
    }

    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }

    public Set<Menus> getMenus() {
        return menus;
    }

    public void setMenus(Set<Menus> menus) {
        this.menus = menus;
    }
}

10.SpringBoot整合Spring Data JPA-操作双向多对多关联映射

(1)编写测试代码,创建角色一个对象,创建两个菜单对象,建立角色对象与菜单对象的关系,并插入到表中。

package com.bjsxt;

import com.bjsxt.dao.ManyToManyRepository;
import com.bjsxt.pojo.Menus;
import com.bjsxt.pojo.Roles;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes =  SpringBootStart.class)
public class ManyToMany {

    @Autowired
    private ManyToManyRepository manyToManyRepository;

@Test
    public  void  isnertRolesAndMenus(){
        //创建菜单
        Menus menus=new Menus();
        menus.setName("小邪财阀集团管理界面");
        menus.setUrl("www.xiaoxie.com");
        menus.setFatherId(0);

        Menus menus1=new Menus();
        menus1.setName("小邪财阀集团后台");
        menus1.setUrl("www.xiaoxieHou.com");
        menus1.setFatherId(1);
        //创建j角色
        Roles roles=new Roles();
        roles.setRoleName("经理");
        //关联

        roles.getMenus().add(menus);
        roles.getMenus().add(menus1);

        menus.getRoles().add(roles);
        menus1.getRoles().add(roles);
        this.manyToManyRepository.save(roles);
    }
}

11.Spring Boot整合Ehcache步骤

(1)什么是Ehcache?

缓冲技术

(2)Spring整合Ehcache的步骤是什么?

1)导入坐标
2)编写ehcache.xml的配置文件
3)修改application.properties的配置文件
4)修改启动类

(3)Ehcache的配置文件应该放在项目的什么位置?

Src/main/resources下

(4)Spring整合Ehcache需要在全局配置文件中配置什么?

spring.cache.ehcache.config=classpath:ehcache.xml

(5)@EnableCaching注解的作用是什么?

Springboot启动的时候会去启动ehcache缓冲

12.Spring Boot整合@CacheEvict注解使用

(1)@Cacheable注解的作用是什么?

将处理的结果存放到缓冲中

(2)@Cacheable注解的value属性的作用是什么?

按照那个缓冲规则来缓冲

(3)@Cacheable注解的key属性的作用是什么?

标识谁可以访问缓存的数据

(4)@CacheEvict注解的作用是什么?

清除缓存的数据