讲解缓存这一块,我建议新建一个项目,勾选如下图内容

项目创建好之后,我们先来一个没有缓存的项目,这里我们会使用到注解开发

非缓存项目

数据库大家自己设计吧,随意,我的是这样的

/*
Navicat MySQL Data Transfer Source Server : shuyunquan
Source Server Version : 80014
Source Host : localhost:3306
Source Database : test Target Server Type : MYSQL
Target Server Version : 80014
File Encoding : 65001 Date: 2019-02-22 13:58:00
*/ SET FOREIGN_KEY_CHECKS=0; -- ----------------------------
-- Table structure for message
-- ----------------------------
DROP TABLE IF EXISTS `message`;
CREATE TABLE `message` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`COMMAND` varchar(16) DEFAULT NULL COMMENT '指令名称',
`DESCRIPTION` varchar(32) DEFAULT NULL COMMENT '描述',
`CONTENT` varchar(2048) DEFAULT NULL COMMENT '内容',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of message
-- ----------------------------
INSERT INTO `message` VALUES ('1', '查看', '精彩内容', '精彩内容');
INSERT INTO `message` VALUES ('2', '段子', '精彩段子', '如果你的月薪是3000块钱,请记得分成五份,一份用来买书,一份给家人,一份给女朋友买化妆品和衣服,一份请朋友们吃饭,一份作为同事的各种婚丧嫁娶的份子钱。剩下的2999块钱藏起来,不要告诉任何人');
INSERT INTO `message` VALUES ('3', '新闻', '今日头条', '7月17日,马来西亚一架载有298人的777客机在乌克兰靠近俄罗斯边界坠毁。另据国际文传电讯社消息,坠毁机型为一架波音777客机,机载约280名乘客和15个机组人员。\r\n乌克兰空管部门随后证实马航MH17航班坠毁。乌克兰内政部幕僚表示,这一航班在顿涅茨克地区上空被击落。马来西亚航空公司确认,该公司从阿姆斯特丹飞往吉隆坡的MH17航班失联,并称最后与该客机取得联系的地点在乌克兰上空。图为马航客机坠毁现场。');
INSERT INTO `message` VALUES ('4', '娱乐', '娱乐新闻', '昨日,邓超在微博分享了自己和孙俪的书法。夫妻同样写幸福,但差距很大。邓超自己都忍不住感慨字丑:左边媳妇写的。右边是我写的。看完我再也不幸福了。');
INSERT INTO `message` VALUES ('5', '电影', '近日上映大片', '《忍者神龟》[2]真人电影由美国派拉蒙影业发行,《洛杉矶之战》导演乔纳森·里贝斯曼执导。 \r\n片中四只神龟和老鼠老师都基于漫画和卡通重新绘制,由动作捕捉技术实现。\r\n其中皮特·普劳泽克饰演达芬奇(武器:武士刀),诺尔·费舍饰演米开朗基罗(武器:双节棍),阿伦·瑞奇森饰演拉斐尔(武器:铁叉),杰瑞米·霍华德饰演多拉泰罗(武器:武士棍)。\r\n该片计划于2014年8月8日在北美上映。');
INSERT INTO `message` VALUES ('6', '彩票', '中奖号码', '查啥呀查,你不会中奖的!');

然后很自然的,我们需要一个Java Bean与之对应

package com.example.bean;

public class Message {
private String id;
private String command;
private String description;
private String content; public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getCommand() {
return command;
} public void setCommand(String command) {
this.command = command;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
} @Override
public String toString() {
return "Message{" +
"id='" + id + '\'' +
", command='" + command + '\'' +
", description='" + description + '\'' +
", content='" + content + '\'' +
'}';
}
}

我们开始使用Mybatis的注解方式进行开发了,不会的学学Mybatis

package com.example.mapper;

import com.example.bean.Message;
import org.apache.ibatis.annotations.*; @Mapper
public interface MessageMapper { @Select("select * from Message where id=#{id}")
public Message getMessageById(Integer id); @Update("update message set COMMAND=#{command},DESCRIPTION=#{description},CONTENT=#{content} WHERE ID=#{id}")
public Message updateMessage(Message message); @Delete("delete from Message where id=#{id}")
public void deleteMessageById(Integer id); @Insert("INSERT message VALUES(#{command},#{description},#{content})")
public void insertMessage(Message message); }

根据这个Mapper,新建一个Service,来实现具体的操作

package com.example.service;

import com.example.bean.Message;
import com.example.mapper.MessageMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; @Service
public class MessageService { @Autowired
MessageMapper messageMapper; public Message getMessage(Integer id){
System.out.println("查询" + id + "号数据");
Message message=messageMapper.getMessageById(id);
return message;
}
}

最后,新建Controller

package com.example.controller;

import com.example.bean.Message;
import com.example.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController; @RestController
public class MessageController { @Autowired
MessageService messageService; @GetMapping("/msg/{id}")
public Message getMessage(@PathVariable("id") Integer id)
{
Message message=messageService.getMessage(id);
return message;
}
}

最后的最后,我们的配置文件写一下,我这里使用的还是yml

spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC
username: root
password: 123456
logging:
level:
com:
example:
mapper: debug

这里需要讲解一下,下面的logging.level在下面直接到mapper,设置为了debug,这个是为了在控制台输出sql语句,Mybatis输出sql语句就是这样写的

运行项目,浏览器输入 http://localhost:8080/msg/3

我们会发现控制台打印出了sql了,如图

这个时候,你可以在浏览器刷新几下,发现控制台每次刷新都会输出一次

这表明了,我们每次访问都会和数据库进行交互

这哪行啊,每次都和数据库进行交互,一个项目里面那么多地方需要和数据库交互,一个系统那么多人在用,数据库表示,我好累

SpringBoot笔记十二:缓存的更多相关文章

  1. SpringBoot第十二集:度量指标监控与异步调用(2020最新最易懂)

    SpringBoot第十二集:度量指标监控与异步调用(2020最新最易懂) Spring Boot Actuator是spring boot项目一个监控模块,提供了很多原生的端点,包含了对应用系统的自 ...

  2. 《C++游戏开发》笔记十二 战争迷雾:初步实现

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9475979 作者:七十一雾央 新浪微博:http:/ ...

  3. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  4. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  5. DirectX11笔记(十二)--Direct3D渲染8--EFFECTS

    原文:DirectX11笔记(十二)--Direct3D渲染8--EFFECTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737 ...

  6. java jvm学习笔记十二(访问控制器的栈校验机制)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 本节源码:http://download.csdn.net/detail/yfqnihao/4863854 这一节,我们 ...

  7. 《深入理解Java虚拟机》读书笔记十二

    第十二章  Java内存模型与线程 1.硬件效率与一致性 由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cac ...

  8. SpringBoot系列(十二)过滤器配置详解

    SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...

  9. (C/C++学习笔记) 十二. 指针

    十二. 指针 ● 基本概念 位系统下为4字节(8位十六进制数),在64位系统下为8字节(16位十六进制数) 进制表示的, 内存地址不占用内存空间 指针本身是一种数据类型, 它可以指向int, char ...

随机推荐

  1. Longest Ordered Subsequence POJ - 2533 最长上升子序列dp

    题意:最长上升子序列nlogn写法 #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  2. 【XSY2721】求和 杜教筛

    题目描述 设\(n=\prod a_i^{p_i}\),那么定义\(f_d(n)=\prod{(-1)^{p_i}[p_i\leq d]}\).特别的,\(f_1(n)=\mu(n)\). 给你\(n ...

  3. Windows如何使用bin文件下的命令

    开发人员安装了一些软件,例如git.maven.gradle等,需要用到对应的bin文件夹下的相应的命令. 如果直接使用,会报错“不是内部或外部命令,也不是可运行的程序或批处理文件” 一.这时往往会配 ...

  4. VIM 光标移动常用命令

        h或^h 向左移一个字符  k或^p 向上移一行 j或^j或^n 向下移一行 l或空格 向右移一个字符 G 移到文件的最后一行 nG 移到文件的第n行 w 移到下一个字的开头 W 移到下一个字 ...

  5. jquery-Ajax请求用例码

    $.ajax({                    type:"post",                    url: 'domain’,                 ...

  6. SCOI 2015 Day2 简要题解

    「SCOI2015」小凸玩密室 题意 小凸和小方相约玩密室逃脱,这个密室是一棵有 $ n $ 个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室.每个灯泡有个权值 $ A_i $,每条边 ...

  7. BSGS算法及扩展

    BSGS算法 \(Baby Step Giant Step\)算法,即大步小步算法,缩写为\(BSGS\) 拔山盖世算法 它是用来解决这样一类问题 \(y^x = z (mod\ p)\),给定\(y ...

  8. 【BZOJ5335】[TJOI2018]智力竞赛(二分图匹配)

    [BZOJ5335][TJOI2018]智力竞赛(二分图匹配) 题面 BZOJ 洛谷 题解 假装图不是一个DAG想了半天,.发现并不会做. 于是假装图是一个DAG. 那么显然就是二分答案,然后求一个最 ...

  9. PyCharmMarkdown插件的方法

    arkdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 从github下载的代码一般都会带有README.md文件,该文件是一个Markdo ...

  10. LOJ #2205. 「HNOI2014」画框 解题报告

    #2205. 「HNOI2014」画框 最小乘积生成树+KM二分图带权匹配 维护一个\((\sum A,\sum B)\)的匹配下凸包,答案在这些点中产生. 具体的,凸包两端可以直接跑单独的\(A\) ...