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)コンソールが再度出力せず、キャッシュが有効であることを示しています
グレインアカデミーのシャンシリコンバレービデオの先生からの説明に感謝します!!!