springBootキャッシングメカニズムキャッシュ

1.キャッシュを導入する

プロジェクトを最初に作成するときは、必ずキャッシュ項目を確認してください(前面が基本操作で、デフォルトのオプションであるSpring Initializrを選択してからキャッシュを確認し、その他はプロジェクトのニーズに応じて確認します)
ここに写真の説明を書いてください

2.事前に環境を整えます

ここに写真の説明を書いてください
ディレクトリ全体を図に示します
ここに写真の説明を書いてください
。Departmentclass

package com.zyj.springboot_cache.bean;

public class Department {
    
    
    private Integer id;
    private String departMentName;

    public Department(Integer id, String departMentName) {
        this.id = id;
        this.departMentName = departMentName;
    }

    public Department() {
    }

    @Override
    public String toString() {
        return "Department{" +
                "id=" + id +
                ", departMentName='" + departMentName + '\'' +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getDepartMentName() {
        return departMentName;
    }

    public void setDepartMentName(String departMentName) {
        this.departMentName = departMentName;
    }
}

従業員クラス

package com.zyj.springboot_cache.bean;

public class Employee {
    
    
    private Integer id;
    private String lastName;
    private String email;
    private Integer gender;
    private Integer dId;

    public Employee() {
    }

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", gender=" + gender +
                ", dId=" + dId +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
    }

    public Integer getdId() {
        return dId;
    }

    public void setdId(Integer dId) {
        this.dId = dId;
    }

    public Employee(Integer id, String lastName, String email, Integer gender, Integer dId) {
        this.id = id;
        this.lastName = lastName;
        this.email = email;
        this.gender = gender;
        this.dId = dId;
    }
}

EmployeeController:

package com.zyj.springboot_cache.controller;

import com.zyj.springboot_cache.bean.Employee;
import com.zyj.springboot_cache.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class EmployeeController {
    @Autowired
    EmployeeService employeeService;

    @GetMapping("/emp/{id}")
    @ResponseBody
    public Employee getEmpById(@PathVariable("id") Integer id) {
        Employee empById = employeeService.getEmpById(id);
        return empById;
    }

    @ResponseBody
    @GetMapping("/updateEmp")
    public Employee updateEmp(Employee employee) {
        System.out.println("方法执行。。。。");
        Employee employee1 = employeeService.updateEmp(employee);
        return employee1;
    }

    @RequestMapping("/delemp")
    public String delEmp(Integer id) {
        employeeService.del(id);
        return "success";
    }

    @RequestMapping("/emp/getEmpByLastName/{lastName}")
    @ResponseBody
    public Employee getEmpByLastName(@PathVariable(value = "lastName") String lastName) {
        System.out.println(lastName);
        return employeeService.getEmpByLastName(lastName);
    }
}

EmployeeMapper

package com.zyj.springboot_cache.mapper;

import com.zyj.springboot_cache.bean.Employee;
import org.apache.ibatis.annotations.*;

@Mapper
public interface EmployeeMapper {
    
    

    @Select("SELECT * FROM employee WHERE id = #{id}")
    public Employee getEmpById(Integer id);

    @Update("UPDATE employee SET lastName = #{lastName} ,email = #{email},gender = #{gender},dId = #{dId} where id=#{id}")
    public void updateEmp(Employee employee);

    @Delete("DELETE FROM employee WHERE id = #{id}")
    public void deleteEmp(Employee employee);

    @Insert("INSERT INTO employee (lastName,email,gender,dId) VALUES(#{lastName},#{email},#{gender},#{dId})")
    public void insertEmp(Employee employee);

    @Select("SELECT * FROM employee WHERE lastName = #{lastName}")
    Employee getEmpByLastName(String lastName);
}

ここに写真の説明を書いてください
例:上記の演習を例として取り上げ
ます。1。従業員ID(@Cacheable)を使用して従業員情報を取得します。

   @Cacheable(cacheNames = {
   
   "emp"})
    public Employee getEmpById(Integer id) {
        System.out.println("查询" + id + "号员工!");
        Employee empById = employeeMapper.getEmpById(id);
        return empById;
    }

1回クエリを実行すると、コンソールにクエリの出力が表示されます。2回目のクエリを実行すると、コンソールはクエリのログ出力を出力しません。これは、これがキャッシュから取得され、データベースがクエリされていないことを示します。
2.従業員情報を更新します(@Cacheput

 @CachePut(value = "emp", key = "#result.id")
    public Employee updateEmp(Employee employee) {
        System.out.println("updateEmployee:" + employee);
        employeeMapper.updateEmp(employee);
        System.out.println(employee);
        return employee;
    }

注があることを、キー=「#1 result.id」、それが追加されていない場合、それはキャッシュもしますが、我々は再び、クエリがまだあるクエリを実行すると、それはそう、ちょうど今、キャッシュ内のデータと同じキーではありません古いデータが更新されていない前のキャッシュにあるため、キーの追加は現在保存されているデータと一致しており、データがデータベース内のデータと同じであることを保証します。
3.キャッシュをクリアします(@CacheEvict

 @CacheEvict(value = "emp")
    public void del(Integer id) {
        System.out.println("删除id为" + id + "的员工");
   }

(1)まず、従業員番号1のデータを照会します。コンソールは照会情報を出力してから、再度照会を実行します。コンソールには、キャッシュされたことを示す情報は出力されません。
(2)この時点で、データがクリアされ、従業員が削除されます(印刷するだけです)
(3)もう一度クエリを実行すると、データベースが再度クエリされていることがわかります。これは、データがクリアされたことを示しています。
4. @Caching

 @Caching(
            cacheable = {
                    @Cacheable(key = "#lastName")
            },
            put = {
                    @CachePut(key = "#result.id"),
                    @CachePut(key = "#result.email")
            }
    )
    public Employee getEmpByLastName(String lastName) {
        return employeeMapper.getEmpByLastName(lastName);
    }

(1)組み合わせ:リクエストを送信

http://localhost:8080//emp/getEmpByLastName/zhangsan

コンソール出力を見ることができます
(2)この時点で、キャッシュが実行され、クエリ操作が再度実行されます。

http://localhost:8080//emp/1

(3)コンソールが再度出力されなかったことがわかります。これは、この時点でキャッシュされたことを示しており、次の手順を実行します。

http://localhost:8080//getEmpByEmail/123456

(4)コンソールが再度出力せず、キャッシュが有効であることを示しています

グレインアカデミーのシャンシリコンバレービデオの先生からの説明に感謝します!

おすすめ

転載: blog.csdn.net/qiuqiu1628480502/article/details/81427630