带着新人学springboot的应用02(springboot+mybatis+缓存 中)
继续接着上一节,大家应该知道驼峰命名法吧!就是我们javabean中属性一般命名是lastName,userName这种类型的,而数据库中列名一般都是last_name,user_name这种的,要让对应起来,在springboot中可以设置

另外大家可以看看我们用了mybatis依赖之后,导入了一些什么jar包,比较关键的是那个autoconfigure,其实内部就跟之前我们手写的那个starter原理差不多


我们也可以用xxxCustomizer来定制功能,以上面的驼峰命名为例,就可以使用这个方式,还能配置其他的很多参数,以后碰到可以再来看看

其实mybatis很多是喜欢用xml的,后期比较好优化sql,所以我们也用xml来尝试一下
xml配置mybatis
xml配置配置的话就比较繁琐一点了,两个xml,然后指定这两个xml的位置
首先映射文件



然后指定这两个文件的路径(对mybatis的配置,yml中都是以mybatis开头的),后面的使用就和前面注解版一样了,这里就不增加篇幅了。你们可以自己试试,我试了是没问题的。

其中,注解版和xml的mybatis是可以一起使用的,不过用起来总是感觉怪怪的,而且如果是比较大的项目sql语句要优化,你一下找注解,一下又去xml找,太不方便了,还是只用其中一种吧!看个人习惯,其实都还行吧,不是怎么难。
下面就继续说说缓存
缓存(接上一节)
上一节最后用了两个关于缓存的注解,一个是@EnableCaching开启注解,二是在service中方法上面用@Cacheable(cacheNames = "stu")来使用缓存
缓存的很多细节就不多说了,因为说了也记不住,说几个关键的地方,分别是CacheManager,Cache,Entry。
因为做缓存方面的公司有很多,做出来的缓存产品也就很多。我们可以把CacheManager看作使用哪一个缓存产品,Cache就是这个缓存产品中的很多个小空间,Entry就是每一个小空间里存放的很多数据(就是很多个键值对);
所以我们要使用缓存,那就要先确定使用哪一家公司做出来的缓存产品,然后拿到其中的一个小空间并取个名字,然后将一个对象放进这个小空间里(都说了是很多个键值对,我们肯定要设置一个键方便我们取啊);
总结起来就是设置CacheManager(springboot默认选好了,后面我们会来自定义),给缓存(小空间)取个名字,设置一个键(springboot也默认有生成方式,后面我们也会自定义)
对应于java代码,就是下图,所以说,#id的意思就是拿到形参中的id值,所谓key;其实只是简单的测试,key都不用写,只用指定缓存的名字就ok了。

类似@Cachable的注解有两个:@CachePut和@CacheEvict,我们可以看看这三个注解有什么用。(注:具体的这三个注解的属性自行看其他的资料学习)
@Cacheable(用于查询):第一次查询之后把返回结果放进缓存里,之后再调用此方法之前会先在缓存里去找,有就直接拿,没有才去数据库。
@CachePut(用于修改和添加):先不管缓存 ,每次必定调用这个方法之后对数据库里的数据修改,然后根据方法返回值去更新缓存;之后别的方法去查询,就直接去缓存里查就是最新数据;
@CacheEvict(用于删除):很明显,这是在执行删除方法删除数据库数据之后,也把该数据对应的缓存也删除掉(假如这个注解的属性cacheName=“stu”,还有个allEntries=true就是删除stu这个小空间里的所有键值对),这个注解有个属性beforeInvocation,true,在方法执行前清空缓存;false,方法执行之后清空缓存,这也是默认值,假如方法执行异常就不清缓存
这几个注解配合起来使用的话,要注意一些东西,首先是cacheNames(和value一个效果)要一样,然后就是键(不管你用什么方法,要最后的结果一致),只有当这两个属性确定之后,才能在缓存中确定一个键值对中对应的值嘛!!!

两个额外的扩展注解:
第一个是@Caching:这个注解就是上面三个注解的组合注解,为了方便定制一些复杂的缓存规则(其实就是上面三个注解的相互配合使用),emmmm.....现在用不到,用到再说。。。。想知道使用规则的可以自己去学习

第二个是@CacheConfig:这个注解加在类上面,其实就是为了方便我们的使用,你看看上面的三个注解的属性基本一样,那是不是可以抽取出来呢?于是就有了这个注解(这也是框架常用手段,常规操作!),具体还有什么属性自己去查查啊,我就随意一说;重点还是上面那三个注解。

这一节到此为止,终于把大概的轮廓和基本的用法说完了,后面就要说一下原理了,以及缓存中那三个注解的属性的一些高级用法了(其实就是自定义一些东西,比如key的生成策略什么的,别想太复杂),顺便再说说使用redis
带着新人学springboot的应用02(springboot+mybatis+缓存 中)的更多相关文章
- 带着新人学springboot的应用01(springboot+mybatis+缓存 上)
上一篇结束,第一次做一个这么长的系列,很多东西我也是没有说到,也许是还没有想到,哈哈哈,不过基本的东西还是说的差不多了的.假如以后碰到了不会的,随便查查资料配置一下就ok. 咳,还有大家如果把我前面的 ...
- 带着新人学springboot的应用04(springboot+mybatis+redis 完)
对于缓存也说了比较多了,大家对下图这一堆配置类现在应该有些很粗略的认识了(因为我也就很粗略的认识了一下,哈哈!),咳,那么我们怎么切换这个缓存呢?(就是不用springboot提供的默认的Simple ...
- 带着新人学springboot的应用03(springboot+mybatis+缓存 下)
springboot+mybatis+缓存,基本的用法想必是会了,现在说一说内部大概的原理. 稍微提一下mybatis,只要导入了mybatis的依赖,那么有个自动配置类就会生效,你可以去mybati ...
- 带着新人学springboot的应用07(springboot+RabbitMQ 下)
说一两句废话,强烈推荐各位小伙伴空闲时候也可以写写自己的博客!不管水平高低,不管写的怎么样,不要觉得写不好或者水平不够就不写了(咳,我以前就是这样的想法...自我反省!). 但是开始写博客之后,你会发 ...
- 带着新人学springboot的应用13(springboot+热部署)
spring cloud我想做成一个系列,所以spring cloud+eureka后面会慢慢说到的,有兴趣的小伙伴可以关注后续! 这一节就简单说说springboot的热部署了(我一直想不通为什么叫 ...
- 带着新人学springboot的应用11(springboot+Dubbo+Zookeeper 上)
这次说个在大型项目比较常见的东西,就是分布式,分布式到底是个什么东西呢?概念太大,不好说,就像刚学javaee的人问你,什么是web啊,什么是spring啊等等,你可能觉得,这个东西我好像知道,但是用 ...
- 带着新人学springboot的应用10(springboot+定时任务+发邮件)
接上一节,环境一样,这次来说另外两个任务,一个是定时任务,一个是发邮件. 1.定时任务 定时任务可以设置精确到秒的准确时间去自动执行方法. 我要一个程序每一秒钟说一句:java小新人最帅 于是,我就写 ...
- 带着新人学springboot的应用09(springboot+异步任务)
本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的 ...
- 带着新人学springboot的应用08(springboot+jpa的整合)
这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...
随机推荐
- PTA L2-011 玩转二叉树 二叉树+bfs
思路: 先建树,然后按层次输出. #include<iostream> #include<cstring> #include<cstdio> #include< ...
- TCP 三次握手、四次挥手
三次握手:(主要是server.client相互同步系列号) SYN:同步序列号 ACK:确认序列号 第一次握手:client 向server 发送SYN,seq=x,申请同步client端序列号,c ...
- USACO 邮票 Stamps
f[x]表示组成 x 最少需要的邮票数量 一一举例 最多贴5张邮票,有三种邮票可用,分别是1分,3分,8分 组成0分需要0张邮票 ——f[0]=0 组成1分需要在0分的基础上加上一张1分邮票 ——f[ ...
- PHP中使用CURL之php curl详细解析
在正式讲怎么用之前啊,先提一句,你得先在你的PHP环境中安装和启用curl模块,具体方式我就不讲了,不同系统不同安装方式,可以google查一下,或者查阅PHP官方的文档,还挺简单的. 1. 拿来先试 ...
- react 的进阶
一 react 中table报错 validateDOMNesting(...): <tr> cannot appear as a child of <table>. See ...
- ionic基于GPS定位并通过百度地图获取定位详细信息
相信所有的前端攻城狮都会碰到移动端App.里面获取用户定位信息. 那么问题来了,怎么获取用户的定位信息(经纬度)呢. 当然方法有很多,通过百度地图API 以及 高德地图 API都是可以的.但是两个获取 ...
- AJAX-同源策略 跨域访问
## 同源策略 概述: 同源策略是浏览器的一种安全策略,视为同源是指域名,协议,端口完全相同.只有同源的地址才可以通过AJAX方式请求.同源或者不同源说的是两个地址的关系,不同源地址之间请求我们称之为 ...
- 小米 OJ 编程比赛 01 月常规赛_灯_找规律
灯 序号:#125难度:有挑战时间限制:1000ms内存限制:32M 描述 一个屋子有 n 个开关控制着 n 盏灯,但奇怪的是,每个开关对应的不是一盏灯,而是 n-1 盏灯,每次按下这个开关,其对应 ...
- vue — 安装并创建vue项目
1.先从node.js官网(https://nodejs.org/en/download/) 下载并安装node,然后通过在命令行输入node -v命令,查看node的版本,要是出现相应的版本号就证明 ...
- 格式化数据保留两位小数,输入格式为 :xxx,xx,,,,x,,(x为浮点数)
/** * 格式化字符串 */ static String dataFormat(String data){ String formatedData = ""; // 浮点数正则表 ...