mybatis
2023-05-02 08:00:50 0 举报
AI智能生成
登录查看完整内容
ssm书籍知识点整理
作者其他创作
大纲/内容
前身是iBatis,本是Apache的一个开源的项目
Mybatis的前身
https://blog.mybatis.org/
官网
https://github.com/mybatis/mybatis-3/releases
Github
https://mybatis.org/mybatis-3/zh/index.html
中文文档
maven仓库
mybatis
相关网站
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
就是将程序的数据在持久化状态和瞬时状态转化的过程。
断电即失
内存
io文件持久化
数据库
持久化
有一些对象,不能让他丢掉
内存太贵了
为什么需要持久化
Dao层,Service层,Controller层
完成持久层工作的代码块
层界限十分明显。
持久层
方便
传统的JDBC代码太复杂
为什么需要Mybatis?
优势
实体类和SQL语句之间建立映射关系
1)在持久化对象上执行基本的增、删、改、查操作
2)对持久化对象提供一种查询语言或者API
3)对象关系映射工具
4) 提供与事务对象交互、执行检查、延迟加载以及其他优化功能
解决的问题
解决面向对象与关系型数据库中数据类型不匹配的技术
作用
基础概念
自动生成SQL语句,并自动执行
它在多表关联时,对SQL查询的支持较差
更新数据时,需要发送所有字段
不支持存储过程
不可以通过优化SQL来优化性能
缺点
理论
Hibernate(全表映射的框架,属于ORM)
可以配置动态SQL并优化SQL
可以通过配置决定SQL的映射规则
他还支持存储过程
Mybatis(半自动化映射)
扩展
Resources获取加载全局配置文件
实例化SqlSessionFactoryBuilder构造器
解析配置文件流XML ConfigBuilder
Configuration所有的配置信息
SqlSessionFactory实例化
transactional事务管理
创建executor执行器
创建sqlSession
实现CRUD
查看是否执行
关闭
执行成功,提交事务
Mybatis的操作流程
用过即丢
InputStream(字节流)
Reader(字符流)
Configuration(类)
build(Configuration config)
方法
读取XML文件构造方式:String resource = \"mybatis-config.xml\"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
SqlSessionFactoryBuilder
SqlSessionFactory是每个MyBatis应用的核心
创建SqlSession实例
生命周期与应用的生命周期相同
Application
作用域
存在于整个应用运行时,并且同时只存在一个对象实例
单例模式
SqlSession session = sqlSessionFactory.openSession(boolean autoCommit);
SqlSessionFactory(会话工厂)
包含了执行SQL所需的所有方法
对应一次数据库会话,会话结束必须关闭
线程级别,不能共享
SqlSession session = sqlSessionFactory.openSession();try { // do work} finally { session.close();}
sqlSession.selectList()
sqlSession.selectOne()
实例直接运行映射的SQL语句
调用sqlSession.getMapper(Mapper.class)执行DAO接口方法来实现对数据的查询操作
基于Mapper接口方式操作数据
一个request请求期间
SqlSession(会话对象)
String resource = \"mybatis-config.xml\"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is) ;SqlSession sqlSession = factory.openSession();
汇总
Mybatis核心对象
mybatis-config.xml(获取连接) →mapper.xml(配置SQL) →sqlSessionFactory(构建工厂) →SqlSession(构造会话对象) →Executor(执行器:接口) →MapperStatement
动态的生成需要执行的SQL语句,同时负责查询缓存的维护
Executor
该信息是对映射信息的封装
用于存储要映射的SQL语句和id、参数
MapperStatement
解释
Mybatis的工作原理
提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
API接口层
负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
数据处理层
负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。
基础支撑层
MyBatis的功能架构(3)
简介
<dependencies> <!--Mybatis核心--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!--Mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.27</version> </dependency> <!--测试依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency> </dependencies>
导入jar包
1、变量
2、get/set方法
3、toString()方法
4、构造方法
引入对方主键作为外键
建表
在有外键的实体的实体类中设置对象实例化
建实体类
一对一
在多的一方,设置外键
. . . 对象实例化集合
一对多
产生中间关系表,引入两张表的主键作为外键,两个主键称为联合主键或使用新的字作为主键。
两边都需要建立实例化集合
多对多
关联关系
<?xml version=\"1.0\" encoding=\"UTF-8\" ?><!DOCTYPE configuration PUBLIC \"-//mybatis.org//DTD Config 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-config.dtd\">
结构
properties
property
dataSource(配置数据库连接池用的)
transactionManager
environment
environments
mapper
mappers
typeAlias
结构一
默认头
package
结构二
typeAliases
configuration
建实体类需要注意了解他们表之间的关联关系
注意
1、根据数据库中表创建好实体类
通过外部指定的方式(database.properties),实现动态配置
直接配置为xml,实现动态配置
<properties resource=\"database.properties\"/> <dataSource type=\"POOLED\"> <property name=\"driver\" value=\"${driver}\"/> <property name=\"url\" value=\"${url}\"/> <property name=\"username\" value=\"${user}\"/> <property name=\"password\" value=\"${password}\"/></dataSource>
一
<properties> <property name=\"driver\" value=\"com.mysql.jdbc.Driver\"/> <property name=\"url\" value=\"jdbc:mysql://127.0.0.1:3306/smbms\"/> <property name=\"user\" value=\"root\"/> <property name=\"password\" value=\"root\"/></properties><dataSource type=\"POOLED\"> <property name=\"driver\" value=\"${driver}\"/> <property name=\"url\" value=\"${url}\"/> <property name=\"username\" value=\"${user}\"/> <property name=\"password\" value=\"${password}\"/></dataSource>
二
resource属性值的优先级高于property子节点配置的值
例如:开启二级缓存、开启延迟加载
修改 MyBatis 在运行时的行为方式
主要是MyBatis的一些全局配置属性的设置
对在此配置文件下的所有cache (缓存)进行全局性开/关设置
默认值为false
CacheEnabled
特定关联关系可以通过配置fetchType属性来覆盖该项开关状态
全局性设置懒加载。如果设为‘false’,则所有相关联的都会被延迟加载
lazyLoadingEnabled
MyBatis对于resultMap自动映射匹配级别
默认值为PARTIAL
NONE
默认//部分→全部
只会自动映射没有定义嵌套结果集映射的结果集。
PARTIAL
全自动映射//包括collection,association也填充
FULL
其他值
autoMappingBehavior
配置默认执行器
就是普通执行器
SIMPLE
执行器会重用预处理语句(prepared statements)
REUSE
执行器将重用语句并执行批量更新
BATCH
值
默认值
defaultExecutoType
设置超时时间
决定驱动等待数据库响应的秒数
defaultStateTimeout
是否开启自动驼峰命名规则(camel case)映射
false
mapUnderscoreToCamelCase
other
jdbcTypeForNull
关联对象属性的延迟加载开关
启动时,所有延迟属性的调用会使带有延迟加载属性的对象完整加载。
关闭,则按需加载。
默认值:true
aggressiveLazyLoading
是否允许单一语句返回多结果集
multipleResultSetsEnabled
使用列标签代替列名。不同的驱动在这方法有不同的表现
驱动文档
测试
观察
useColumnLabel
允许JDBC支持自动生成,需要驱动兼容。
如果设置true,则这个设置强制使用自动生成主键,尽管一些驱动不兼容但仍可正常工作
userGenratedKeys
这个参数的含义是当调用配置中的方法时,加载全部的延迟加载数据。
“equals,clone,hashCode,toString”
lazyLoadTriggerMethods
name
value
在一定程度上可以降低运行消耗并提高查询效率。
<settings name=“lazyLoadingEnabled” value=“true”><setting name=\"lazyLoadingEnabled\" value=\"true\"></setting><setting name=\"aggressiveLazyLoading\" value=\"false\"></settings>
配置
<association>
<collection>
关联映射
延迟加载
fetchType=\"lazy\"
立即加载
fetchType=\"eager\"
都默认配置了延迟加载属性
1、MyBatis延迟加载的配置
属性的使用
<settings><setting name=”autoMappingBehavior” value=”NONE”/>//不自动填充</settings>
例子
settings
为java类型命名一个别名
包位置
type
别名
alias
普通:在前面添加_
int
_integer
特殊
映射类型首字母小写
基本数据类型
普通:就是小写首字母
Integer
integer
映射类型首字母大写
包装数据类型
Date
date
BIgDecimal
decimal
都是小写首字母
其他
默认别名
指定包下JavaBean的非限定类名
将预处理语句中传入的参数从javaType(Java类型)转换为jdbcType(JDBC类型)。
或者从数据库取出结果时将jdbcType转换为javaType。
类型处理器
处理器的位置
handler
属性
typeHandler
包的位置
子标签
使用(自定义类处理器)
typeHandlers
对象工厂
1、实现接口或者继承DefaultObjectFactory类
工厂类的位置
取名
类名
objectFactory
2、在配置文件配置
使用(自定义对象工厂)
拦截调用
插件
plugins
表示配置MyBatis的多套运行环境,将SQL映射到多个不同的数据库上
环境
必须指定
default
id
<environments default=\"development\">//默认的运行环境ID<environment id=\"development\"> //运行环境ID<transactionManager type=\"JDBC\"/>//事务管理器的配置<dataSource type=\"POOLED\">//数据源配置 <property name=\"driver\" value=\"${driver}\"/> <property name=\"url\" value=\"${url}\"/> <property name=\"username\" value=\"${user}\"/> <property name=\"password\" value=\"${password}\"/></dataSource></environment><environment id=\"test\">……</environment></environments>
事务管理器
直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的 连接 来处理事务的作用域。
JDBC
从配置从来不提交或回滚一个连接,而是让 容 器 来管理事务的整个生命周期。
默认情况下,他会关闭连接,如果不希望,则可以将closeConnection属性设置为false来阻止它默认的关闭行为。
MANAGED
<transactionManager type=\"[ JDBC | MANAGED(托管)]\" />
那么就不用再Mybatis使用事务管理器,因为Spring自带的管理器来实现事务管理。
如果同时使用Spring+Mybatis
元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源
默认的连接事务隔离级别
defaultTransactionIsolationLevel
还有一个
<dataSource type=\" [UNPOOLED | POOLED | JNDI]\" /><dataSource type=\"POOLED\"> <property name=\"driver\" value=\"${driver}\"/> <property name=\"url\" value=\"${url}\"/> <property name=\"username\" value=\"${user}\"/> <property name=\"password\" value=\"${password}\"/></dataSource>
表示获取连接时不是从连接池中获取,而是直接new了一个连接返回。
每次被请求都会打开和关闭连接
UNPOOLED
利用了连接池的思想
首先先判断空闲连接池内有没有空闲连接,如果还有则给你返回一个空闲连接。
如果没有空闲连接,则去活动连接池内看看还有没有位置,如果还有,则new一个连接给你返回
如果活动连接池没有位置了,则返回在活动连接池使用最久的连接。意思就是给你返回一个在活动连接池内待最久的连接。
步骤
避免了在创建新的连接实例时所需要初始化和认证的时间,这种方式使得并发Web应用快速地响应请求,时当前留下地处理方式。
优点
在任意时间可以存在的活动连接数量,默认值10
poolMaximumActiveConnections
任意时间可能存在的空闲连接数
pooMaximumdleConnections
在被强制返回之前,池中连接被检出时间。默认值:20000.(20s)
poolMaximumCheckoutTime
如果获取连接花费的时间较长,它会给连接池打印状态日志并重新尝试重新获取一个连接。默认值为20000.(20s)
poolTimeToWait
发送到数据库的侦测查询,用于检索连接是否处于正常工作秩序中。默认是\"NO PING QUERY SET\
poolPingQuery
是否启用侦测查询。若开启,必须使用一个可执行的SQL语句设置poolPingQuery属性,默认值:false
poolPingEnabled
配置poolPingQuery的使用频度,可以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值:0(表示所有连接所有时刻都被侦测。)
poolPingConnectionsNotUsedFor
多的属性
POOLED
这个属性内部是使用了JNDI技术,每个服务器对应的连接池技术都不一样,比如tomcat服务器使用的dpcp连接池。这个属性值只能在web工程和maven的web工程中使用。
可以在EJB或应用服务器等容器中使用
可以集中或在外部配置数据源,然后防止一个JNDI上下文引用。
使用
主要用于寻找上下文
initial_context
表示引用数据源实例位置的上下文的路径
data_source
在InitialContext
如果没有配置
在上下文
JNDI
三种数据源类型
映射器
使用类资源路径获取资源
<mappers> <mapper resource=\"cn/smbms/dao/user/UserMapper.xml\"/></mappers>
方法一
sql
使用URL获取资源
<mappers> <mapper url=\"file:///E:/sqlmappers/UserMapper.xml\"/> <mapper url=\"file:///E:/sqlmappers/ProviderMapper.xml\"/></mappers>
方法二
<mapper class=\"com.yc.bean.mybatis\"></mapper>
方法三(接口类引入)
<package name=\"包的位置\"></package>
方法四(使用包名引入)
dataSource
<?xml version=\"1.0\" encoding=\"UTF-8\" ?><!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\" \"http://mybatis.org/dtd/mybatis-3-mapper.dtd\">
#
$
两种取值方式
parameterType
resultType
自定义返回类型
resultMap
select
insert
update
delete
语句
cache
cache-ref
result
类
名字
true自动映射
autoMapping
类在实例化时,用来注入结果到构方法中
ID参数;标记结果作为ID
idArg
注入到构造方法的一个普通结果
arg
constructor
用于表示哪个列是主键
注入到字段或javaBean属性的普通结果
表列名字
column
变量名
一般是list,map
变量类型
jdbcType
里面的类型
ofType
运行某语句获得
例如
传参数
<resultMap id=\"BaseResultMap\" type=\"com.xxx.modules.xxx.entity.Question\" > <id column=\"id\" property=\"id\" jdbcType=\"VARCHAR\" /> <result column=\"content\" property=\"content\" jdbcType=\"VARCHAR\" /> <result column=\"type\" property=\"type\" jdbcType=\"VARCHAR\" /> <result column=\"sort\" property=\"sort\" jdbcType=\"INTEGER\" /> <collection property=\"options\" javaType=\"java.util.ArrayList\" ofType=\"com.xxx.modules.data.entity.QuestionOption\"> <id column=\"o_id\" property=\"id\" jdbcType=\"VARCHAR\" /> <result column=\"o_content\" property=\"content\" jdbcType=\"VARCHAR\" /> <result column=\"o_sort\" property=\"sort\" jdbcType=\"INTEGER\
直接从查询结果中获取值
<resultMap id=\"BaseResultMap\" type=\"com.xxx.modules.xxx.entity.Question\" > <id column=\"id\" property=\"id\" jdbcType=\"VARCHAR\" /> <result column=\"content\" property=\"content\" jdbcType=\"VARCHAR\" /> <result column=\"type\" property=\"type\" jdbcType=\"VARCHAR\" /> <result column=\"sort\" property=\"sort\" jdbcType=\"INTEGER\" /> <collection property=\"options\" javaType=\"java.util.ArrayList\" ofType=\"com.xxx.modules.xxx.entity.QuestionOption\" select=\"com.xxx.modules.xxx.mapper.QuestionOptionMapper.selectList\" column=\
或者自己查询,获取值
使用方法
collection(list等等,1对多)
role
javaType
同上,两种方式
association(对象1对1,多对1)
case(基于某些值得结果映射)
主要用于处理一个单独得数据库查询返回很多不同数据类型结果集的情况
用途
discriminator(使用结果值来决定使用哪个结果映射)
在调用SQL语之后,是否需要MyBatis清空之前查询的本地缓存和二级缓存。
flushCache
用于控制二级缓存的开启和关闭,其值为布尔类型
存入二级缓存
true
useCache
设置超时参数
timeout
获取记录的总条数设定
依赖于驱动
unset
fetchSize
用于设置MyBatis使用哪个JDBC的statement工作工作
Statement
PreparedStatement
CallableStatement
分别对应
STATEMENT
PREPARED
CALLABLE
statementType
表示结果集的类型
FORWARD_ONLY
SCROLL_SENSITIVE
SCROLL_INSENSITIVE
resultSetType
只适用于更新和插入
注意,删除没有这三个属性
插入或更新成功后获取主键值,通过这三个属性
keyProperty=“id”
此属性的作用时将插入和更新的返回值赋值给po类的一个属性
keyProperty=“id,key”
可以在多个值之间用逗号隔开
联合主键
keyProperty
设置第几行为主键
当主键列不是表中的第一列时设置。
多个主键,用逗号隔开。
keyColumn
此属性会使Mybatis使用JDBC的getGeneratedKeys()方法来获取由数据库内部产生的主键(如mysql自动递增的字段)
useGeneratedKeys
当数据库不支持自动增长,或者支持增长的数据库取消了主键自增规则。(使用这句话来自定义生成主键)
<selectKey keyProperty=\"id\" resultType=\"Integer\" order=\"BEFORE\
当数据库没有记录时,则设置id为1
那么它会首先执行<selectKey>元素中的配置来设置主键,然后执行插入语句
BEFORE
AFTER
order
selectKey
基于OGNL表达式
参数为空
解决问题
用于参数判空
条件
test
if
添加where、set、values
删除and、,
更灵活的去除多余关键字
prefix前缀
Suffix后缀
去除后面多余的,
prefixOverrides前缀覆盖
去除前面多余的,
suffixOverrides后缀覆盖
trim
当只传入参数:用户角色,而不传入参数:用户名称的时候,控制台报SQL异常错误?
问题
当有if成立,就加 where
where
更新用户表数据时,若某个参数为null时,会导致更新错误
有if成立,加set
set
when
otherwise
choose(条件添加语句)
元素别名
item
循环类型
collection
开头
open
间隔
separator
结束
close
foreach(循环给值)
就是一个参数
外面传一个参数
就是map对象
传2+
语句中出现_parameter
标签
动态sql
resultMap(类中包含了其他的类)
标签详情(重点)
3、书写映射文件,就是查询的时候对象跟数据库表中的数据如何对应。
a.读取解析配置文件
b.通过配置文件创建SqlSessionFactory工厂
c.通过SqlSessionFactory工作获取SqlSession
d.SqlSession执行对应sql语句
4、通过mybatis访问数据库,获取结果
mybatis的普通使用
方式一
selectList()
rowBounds在使用执行查询的方法的时候作为参数
java代码层实现分页
方式二
下载jar的方式
还需要下载jsplparser.jar
由于使用了sql解析工具
引入jar包
在pom.xml里面添加依赖
Maven方式
两种方式
1、引入分页插件
新版拦截器com.github.pagehelper.PageInterceptor
<plugins><plugin interceptor=\"com.github.pagehelper.PageInterceptor\"><property name=\"param1\" value=\"value1\"></plugin></plugins>
1、在Mybatis配置xml中配置拦截器插件
2、Spring配置文件中配置拦截器插件
2、配置拦截器插件
Mybatis分页插件PageHelper
分页插件
方式三
分页的实现
给参数命令
@Param(\"名字\")
可以省略xml的配置
1、写@select()
2、绑定接口<mappers><mapper class=\"com.kuang.dao.UserMapper\"></mappers>
3、测试
@Select(\"语句\")
@Insert()
@Update()
@Delete()
注解的开发
经常查询并且不经常改变的数据
StatementHandler
存在内存中的临时数据
将用户经常查询的数据放在缓存(内存)中,用户就不用去磁盘查询了,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题
什么是缓存Cache?
减少和数据库的交互次数,减少系统开销,提高系统效率。
为什么要使用缓存?
什么样的数据能使用缓存?
映射语句文件中的所有select语句的结果将会缓存
映射语句文件中所有insert,update和delete语句会刷新缓存
缓存不会定时进行刷新(也就是说,没有刷新间隔)。
缓存会保存列表或对象(无论查询方法)的1024个引用
缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或现场所做的潜在修改。
简单语句的效果
查询不同的东西
增删改操作,可能会改变原来的数据,所以必定会刷新缓存!
查询不同的Mapper.xml
手动清理缓存
sqlSession.clearCache();
手动清理缓存!
就是一个mapper
一级缓存
概要
缓存失效
缓存只作用于cache标签所在的映射文件中的语句。如果你混合使用Java API和XML映射文件,在共用接口中的语句将不会被默认缓存。你需要使用@CacheNamespaceRef注解指定缓存作用域
缓存的方法
eviction
刷新秒数
flushInterval
最多存储结果对象或列表的512引用
size
readOnly
<cache/>
只需要在映射文件中添加一行
<setting name=\"cacheEnabled\" value=\"true\"></setting>
显示的开启全局缓存
在要使用二级缓存的Mapper中开启
一个会话查询一条数据,这个数据就会被放在当前的一级缓存中
如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中;
新的会话查询信息,就可以从二级缓存中获取内容
不同的mapper查出的数据会放在自己对应的缓存(map)中
工作机制
也可以在属性中关闭缓存
Caused by: java.io.NotSerializableException: com.kuang.pojo.User
报错
只要开启了二级缓存,在同一个Mapper下就有效
所有数据一开始放在一级缓存中,只有当会话提交,或者关闭的时候,才会提交到二级缓存中!
总结
二级缓存
查询数据库
再看一级缓存有没有
先看二级缓存有没有
缓存
Mybatis包含了一个非常强大的查询缓存特性,他可以非常方便地定制和配置缓存。
Mybatis系统中默认定义了两级缓存:一级缓存和二级缓存
SqlSession级别的缓存,也称为本地缓存
只有一级缓存开启
默认
二级缓存需要手动开启和配置,他是基于namespace级别的缓存。(mapper)
Mybatis定义了缓存接口Cache。
我们可以通过实现Cache接口来自定义二级缓存
为了提供扩展性
一开始使用Memcached
mybatis缓存
高并发问题
当多个服务器操作一个数据库
读写分离,主从复制
当多个数据库
概念
创建了一个FIFO缓存,每隔60秒刷新,最多可以存储结果对象或列表的512个引用,而且返回的对象被认为是只读的,因此对它们进行修改可能会在不同线程中的调用者产生冲突。
移除最长时间不被使用的对象
最近最少使用
LRU
按对象进入缓存的顺序来移除它们
先进先出
FIFO
基于垃圾回收器状态和软引用规则移除对象
软引用
SOFT
更积极地基于垃圾收集器状态和弱引用规则移除对象
弱引用
WEAK
可用的清除策略
默认的清除策略
刷新间隔
引入数目
1024
只读
当没有执行flushCache=true的insert/delete/update语句时,缓存会获得更新
二级缓存是事务性的
与数据库同一次会话期间查询到的数据会放在本地缓存中。
以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库
一级缓存也叫本地缓存
也叫全局缓存
一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中
如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中
日志观察
纯Java的进程内缓存框架
是Hibernate中默认的CacheProvider
开源Java分布式缓存,主要面向通用缓存
Ehcache
Mybatis Ehcache
导入
<cache type=\"org.mybatis.caches.ehcache.EhcacheCache\">
在mapper中加入
创建文件ehcache.xml
程序中使用
实现Cache
第二种
自定义缓存
一般使用Redis实现缓存
0 条评论
回复 删除
下一页