带着新人学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 ...
随机推荐
- Unity Rain Ai 插件基本使用(二)
前言 在前面的教程中我们已经基本实现了路径导航和障碍物规避. 但是这样我们并没有让我们的角色学会思考,他只是机械的去完成一些步骤,这并不能体现Rain插件的智能. 一个角色他应该有多个不同的状态,待机 ...
- fiddler 抓取 htts 失败
1.清除C:\Users\Administrator\AppData\Roaming\Microsoft\Crypto\RSA 目录下所有文件(首次安装fiddler请忽略) 2.清除电脑上的根证书, ...
- CloseableHttpClient获取https请求不验证证书
创建---调用 CloseableHttpClient httpclient = getHttpsClient(); /** * 获取https连接(不验证证书) * * @return */ pri ...
- 解决win10 报错 git pull error: cannot open .git/FETCH_HEAD: Permission denied
sh配置git 用户解决了 git config --list //查看当前的config配置 git config --global user.name "youruser" / ...
- Python-list,字典,Tuple
list:用[]包围,逗号隔开如:l = [1,2,3] 其他用法:li = ["a" ,"b" , "c", "d"] ...
- Linux Kernel C语言编程范式
介绍 不同的编程语言具有不同的抽象原语(如下),有的原语抽象层次低,有的原语抽象层次高.其中函数式.DSL是这几年十分热门的编程语言概念. 过程式抽象原语:变量 对象式抽象原语:对象 函数式抽象原语: ...
- HDU-AcmKeHaoWanLe训练实录
菜鸡队训练实录. 现场赛记录:[名称:奖项/排名] 2017: ICPC Shenyang:Gold/3 CCPC Hangzhou:Gold/3 ICPC Beijing:Gold/13 CCPC ...
- java拦截处理System.exit(0)
在使用TestNG做单元测试时,需要测试的代码中出现System.exit(0),导致单元测试还未结束程序就停止了.解决方法如下: public class TestMain { public sta ...
- CSS文字的跑马灯特效
上学时同学有个来电带跑马灯的手机,可把我羡慕坏了,可等我买的起手机时,跑马灯不流行了,甚伤萝卜心! 今天就用CSS做个文字的跑马灯特效,缅怀一下本萝卜逝去的青春! 道具:会敲代码的巧手.七窍玲珑心.会 ...
- 前端系列——jquery.i18n.properties前端国际化解决方案“填坑日记”
前言:最近,新的平台还没有开发完成,原来的老项目又提出了新的需求:系统国际化.如果是前后端完全分离的开发模式,要做国际化,真的太简单了,有现成的解决方案,基于Node构建的时下热门的任何一种技术选型都 ...