带着新人学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 ...
随机推荐
- jquery只获取自身文本节点,不获取子元素的
jQuery.text()方法时候,会把子元素的文本也获取到,以下方法可获取自身文本节点,不包括子元素 <div id="demo">只获取我<a href=&q ...
- Android中Adapter类的使用 “Adapter”
Adapter用来把数据绑定到扩展了AdapterView类的视图组(例如:ListView或Gallery).Adapter负责创建代表所绑定父视图中的底层数据的子视图. 可以创建自己的Adapte ...
- 无代理处理post非简单请求跨域问题
express下 在处理纯http服务post请求的时候的跨域问题 即使在服务端先加入 Access-Control-Allow-Origin: *(get即时有效) 会出现 Failed to lo ...
- dubbo+zookeeper报错:com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method可能的错误原因有三个前两个是从网上摘得, 第三个是自己解决的 1.需要进行 ...
- 11-Cookie&Session
中文文件下载 针对浏览器类型,对文件名字做编码处理 Firefox (Base64) , IE.Chrome ... 使用的是URLEncoder /* * 如果文件的名字带有中文,那么需要对这个文件 ...
- Windows下安装Kafka
一.安装JDK 二.安装zooeleeper 下载安装包:http://zookeeper.apache.org/releases.html#download 下载后解压到一个目录: 1.进入Zook ...
- 我在B站投稿啦、、、
我在B站投稿啦....欢迎评论交流... https://www.bilibili.com/video/av31539882/ 怎样激活Win10系统修改windows系统账户的名称-mp4 外链: ...
- Ubuntu下安装Pycharm出现unsupported major.minor version 52.0
(一)原因 Ubuntu下pycharm安装:https://jingyan.baidu.com/article/60ccbceb4e3b0e64cab19733.html pycharm激活:htt ...
- CrypMic分析报告
一.概述 病毒伪装为NirSoft公司的软件NirCmd并加了MPRESS壳,脱壳后是一个混淆过的PE程序,运行时会用到类似PE映像切换的方式来释放出实际的恶意代码,恶意代码主要对文件进行加密. 二. ...
- 无需sendmail:巧用LD_PRELOAD突破disable_functions
*本文原创作者:yangyangwithgnu,本文属FreeBuf原创奖励计划,未经许可禁止转载 摘要:千辛万苦拿到的 webshell 居然无法执行系统命令,怀疑服务端 disable_funct ...