继续接着上一节,大家应该知道驼峰命名法吧!就是我们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+缓存 中)的更多相关文章

  1. 带着新人学springboot的应用01(springboot+mybatis+缓存 上)

    上一篇结束,第一次做一个这么长的系列,很多东西我也是没有说到,也许是还没有想到,哈哈哈,不过基本的东西还是说的差不多了的.假如以后碰到了不会的,随便查查资料配置一下就ok. 咳,还有大家如果把我前面的 ...

  2. 带着新人学springboot的应用04(springboot+mybatis+redis 完)

    对于缓存也说了比较多了,大家对下图这一堆配置类现在应该有些很粗略的认识了(因为我也就很粗略的认识了一下,哈哈!),咳,那么我们怎么切换这个缓存呢?(就是不用springboot提供的默认的Simple ...

  3. 带着新人学springboot的应用03(springboot+mybatis+缓存 下)

    springboot+mybatis+缓存,基本的用法想必是会了,现在说一说内部大概的原理. 稍微提一下mybatis,只要导入了mybatis的依赖,那么有个自动配置类就会生效,你可以去mybati ...

  4. 带着新人学springboot的应用07(springboot+RabbitMQ 下)

    说一两句废话,强烈推荐各位小伙伴空闲时候也可以写写自己的博客!不管水平高低,不管写的怎么样,不要觉得写不好或者水平不够就不写了(咳,我以前就是这样的想法...自我反省!). 但是开始写博客之后,你会发 ...

  5. 带着新人学springboot的应用13(springboot+热部署)

    spring cloud我想做成一个系列,所以spring cloud+eureka后面会慢慢说到的,有兴趣的小伙伴可以关注后续! 这一节就简单说说springboot的热部署了(我一直想不通为什么叫 ...

  6. 带着新人学springboot的应用11(springboot+Dubbo+Zookeeper 上)

    这次说个在大型项目比较常见的东西,就是分布式,分布式到底是个什么东西呢?概念太大,不好说,就像刚学javaee的人问你,什么是web啊,什么是spring啊等等,你可能觉得,这个东西我好像知道,但是用 ...

  7. 带着新人学springboot的应用10(springboot+定时任务+发邮件)

    接上一节,环境一样,这次来说另外两个任务,一个是定时任务,一个是发邮件. 1.定时任务 定时任务可以设置精确到秒的准确时间去自动执行方法. 我要一个程序每一秒钟说一句:java小新人最帅 于是,我就写 ...

  8. 带着新人学springboot的应用09(springboot+异步任务)

    本来想说说检索的,不过不知道什么鬼,下载ElasticSearch太慢了,还是放一下,后面有机会再补上!今天就说个简单的东西,来说说任务. 什么叫做任务呢?其实就是类中实现了一个什么功能的方法.常见的 ...

  9. 带着新人学springboot的应用08(springboot+jpa的整合)

    这一节的内容比较简单,是springboot和jpa的简单整合,jpa默认使用hibernate,所以本质就是springboot和hibernate的整合. 说实话,听别人都说spring data ...

随机推荐

  1. C++ MD5类封装

    c++ md5 算法封装 md5.h #ifndef MD5_H #define MD5_H #include <string> #include <fstream> /* T ...

  2. Vue.js的安装及简单使用

    一.Vue简介 二.Vue.js的安装 2.1.npm安装 2.1.1.node.js介绍及安装 简介: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基 ...

  3. [CF1132G]Greedy Subsequences

    [CF1132G]Greedy Subsequences 题目大意: 定义一个序列的最长贪心严格上升子序列为:任意选择第一个元素后,每次选择右侧第一个大于它的元素,直到不能选为止. 给定一个长度为\( ...

  4. android BLE Peripheral 模拟 ibeacon 发出ble 广播

    Android对外模模式(peripheral)的支持: 从Android 5.0+开始才支持. api level >= 21 所以5.0 之前设备,是不能向外发送广播的. Android中心 ...

  5. c#几种随机数组和数组乱序

    相关资料MSDN:RNGCryptoServiceProvider   Random   Guid private static RNGCryptoServiceProvider rngCsp = n ...

  6. 通配符的匹配很全面, 但无法找到元素 'context:property-placeholder' 的声明。

    在Spring相应包导入正确的前提下,出现这个异常,是因为我们在引入命名空间的时候,没有正确引入它的DTD解析文件,以上面的context为例,解决办法如下: 在引入 xmlns:context=&q ...

  7. VUE 一些环境配置

    1. 安装  nrm 一键切换npm源 npm i nrm -g       [安装命令工具] nrm ls                 [罗列出所有的源] nrm use taobao  [使用 ...

  8. Maven工程无异常 启动没有出现Starting ProtocolHandler的原因

    这个情况可能的原因 一般来说有3种1.数据库没连接上2.注册中心没连接上3.逆向工程生成的mapper 有问题解决:哪个Maven工程出问题,就那个工程的src/main/resource目录下面添加 ...

  9. Logstash导入数据到ElasticSearch

    一:在Windows环境 1 下载解压Logstash的压缩包 2 在Logstash的压缩包中安装Logstash-jdbc-input插件: 在Bin命令行下运行命令: .\logstash-pl ...

  10. Java 设计模式(概述)

    设计模式的三个分类                                                                                   创建型模式:对象 ...