Mybatis-缓存工作原理
前言在计算机的世界中,缓存无处不在,操作系统有操作系统的缓存,数据库也会有数据库的缓存,各种中间件如 Redis 也是用来充当缓存的作用,编程语言中又可以利用内存来作为缓存。自然的,作为一款优秀的 ORM 框架,MyBatis 中又岂能少得了缓存!
MyBatis 缓存MyBatis 中的缓存相关类都在 cache 包下面,而且定义了一个顶级接口 Cache,默认只有一个实现类 PerpetualCache,PerpetualCache 中是内部维护了一个 HashMap 来实现缓存。需要注意的是 decorators 包下面的所有类也实现了 Cache 接口,那么为什么我还是要说 Cache 只有一个实现类呢?其实看名字就知道了,这个包里面全部是装饰器,也就是说这其实是装饰器模式的一种实现。我们随意打开一个查看可以看到,最终都是调用了 delegate 来实现,只是将部分功能做了增强,其本身都需要依赖 Cache 的唯一实现类 PerpetualCache(因为装饰器内需要传入 Cache 对象,故而只能传入 PerpetualCache 对象,因为接口是无法直接 new 出来传进去 ...
Mybatis-动态SQL
在 Structs 流行的时代 OGNL 可是必会的数据渲染技术。它全称 Object Graph Navigation Language,作用是降低对数据层访问的难度,它拥有类型转换、访问对象方法、操作集合对象等功能。目前已经很少通过 OGNL 来访问数据层了,目前国内大部分的 ORM 框架是 Mybatis,而 Mybatis 中的动态 SQL 技术运用了 OGNL。
Mybatis 中的 OGNL不少人在 Mybatis 的 Mapper 文件中写过这样的判断:
123<if test="field!='' and field!= null"> and some_col = #{field}</if>
当 field 不为空字符并且不为 null 的情况下增加一个查询条件。其中 test 就是一个 OGNL 表达式。Mybatis 中的 OGNL 表达式主要有两种用途。
条件断言这种是最常用的。执行动态 SQL 的条件断言,常用的有这些表达式:
b1 or b2 条件 或
b1 and b2 条件 与
!b1 取反,也可以写作 not b1
b1 = ...
Mybatis-使用PageHelper分页
1、引入依赖只引入 PageHelper 不会自动适配 SpringBoot 失效,还需要整合依赖 pagehelper-spring-boot-autoconfigure
123456789101112<!--pagehelper分页插件 --><dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version></dependency><!-- Mybatis-plus --><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <ver ...
Mybatis-拦截器插件例子(敏感信息加密)
1. 前言在学习 PageHelper 分页插件的时候,对于其如何和 Mybatis 结合进行拦截,还是有些朦胧,这里通过一个例子实现自定义的 Mtbatis 拦截器插件。
2、什么是 Mybatis Plugin在 Mybatis 官方文档中,对于 Mybatis plugin 的的介绍是这样的:MyBatis 允许在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:
12345678//语句执行拦截Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)// 参数获取、设置时进行拦截ParameterHandler (getParameterObject, setParameters)// 对返回结果进行拦截ResultSetHandler (handleResultSets, handleOutputParameters)//sql语句拦截StatementHandler (prepare, para ...
MybatisPlus-简化开发
MybatisPlus 官方文档:https://baomidou.com/guide/page.html
Mybatis Plus 使用流程导入依赖:12345<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.4.3.2</version></dependency>
实现映射:1.对象名称与表的名称一一对应。 2.对象的属性与表中的字段一一对应。
注解:@TableName表名注解
属性
类型
必须指定
默认值
描述
value
String
否
“”
表名
schema
String
否
“”
schema
keepGlobalPrefix
boolean
否
false
是否保持使用全局的 tablePrefix 的值(如果设置了全局 tablePrefix 且自行设置了 value 的值)
resul ...
SSM框架整合
1. 环境配置1.1 新建一Maven项目!ssmbuild , 添加web的支持1.2 导入相关的pom依赖!123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566<dependencies> <!--Junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--数据库驱动--> <dependency> <groupId>mysql</groupId> <artifac ...