继续接着上一节,大家应该知道驼峰命名法吧!就是我们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. shell 命令 使用

    [root@ken ~]# cat ken.sh http://www.baidu.com http://www.baidu.com http://www.sina.com http://www.si ...

  2. Git 通过ssh 配置基于Host的差异配置

    Host gitlab.xxx.com HostName gitlab.xxx.com User user IdentityFile xxx\.ssh\id_rsa Host github.com H ...

  3. 启动两个tomcat服务,以及使用nginx代理实现访问

    1.shoudowm.bat\startup.bat\catalina.bat, 将CATALINA_HOME修改为CATALINA_HOME_2 2.server.xml <Server po ...

  4. Vue 随机分配的打扫卫生H5 :打扫让我快乐

    情况是这样子的,每周四是我们小组打扫卫生,一共有四件活,7个人分配. 活分别是 : 扫地 拖地 倒垃圾 擦桌子 人分别是: '军', '春', '龙', '东', '贤', '磊','卿' 但是,每次 ...

  5. Class 和 普通构造函数区别

    1. Class 在语法上更加贴合面向对象的写法 2. Class在实现继承上更加易读.易理解 3. 更易于写java等后端语言 4.本质还是语法糖,使用prototype

  6. hive求TopN语句

    ROW_NUMBER,RANK(),DENSE_RANK() 先了解这三个之间的区别: Rank():1,2,2,4,5(一般用这个较多,不会影响总排名) Dense_rank():1,2,2,3,4 ...

  7. numpy地址

    pip安装  http://zhidao.baidu.com/link?url=nkRwDOZ1ALMjRsWHGMR1nLSIyuVycoD4j-mhGDsYptPwDRGYcE8u4_B9VvYk ...

  8. Redis安装、命令以及设置密码遇到的问题

    一.下载Redis 如果没有 安装wget先安装wget和gcc(使用make的时候会用上) wget http://download.redis.io/releases/redis-4.0.8.ta ...

  9. linux常见命令实践.

    ls -la : 给出当前目录下所有文件的一个长列表,包括以句点开头的“隐藏”文件 ls -a . .. 1 online_tools online_tools_0803 ll: 竖列显示所有文件 l ...

  10. 高性能网络服务器编程:为什么linux下epoll是最好,Netty要比NIO.2好?

    基本的IO编程过程(包括网络IO和文件IO)是,打开文件描述符(windows是handler,java是stream或channel),多路捕获(Multiplexe,即select和poll和ep ...