MyBatis
2022-02-25 20:34:13 51 举报
AI智能生成
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 MyBatis的主要特点包括:简单易用、灵活、可插拔、提供XML标签,解除sql与程序代码的耦合,通过DAO层向上传递参数,向下返回结果。
作者其他创作
大纲/内容
SqlSession级别
Map
本地缓存
1.级别
同一个SqlSession对象
查询同一条数据
2.作用
SqlSession不同
查询条件不同
两次查询期间有增删改操作
两次查询期间,清除了缓存
3.失效情况
一直开启
4.使用
关闭会话
1.一级缓存
直接从缓存中拿,不需要重新查询
默认开启
namespace
在查询到一个数据并关闭会话后,想让新会话也拿到这个数据
关闭
提交
一个会话
3.原理
二级缓存
一级缓存中的数据
<setting name="cacheEnabled" value="true"/>
1.主配置文件
移除最长时间没用的对象
LRU(默认)
按对象进入缓存的顺序移除
先进先出
FIFO
移除基于垃圾收集器状态和弱引用规则的对象
软引用
SOFT
更积极地移除基于垃圾收集器状态和弱引用规则的对象
弱引用
WEAK
缓存的回收策略
eviction
按毫秒算
缓存刷新间隔
flushInterval
速度快
不安全
直接把数据在缓存中的引用交给调用者
只读。mybatis认为所有从缓存中获取数据的操作都是只读操作,不会修改数据。
true
速度慢
安全
使用序列化复制一份数据给调用者
非只读(默认)。mybatis认为获取的数据可能会被修改。
false
readOnly
1024
指定缓存中能放多少个元素
size
指定自定义缓存的全类名。自定义缓存只需要实现Cache接口即可。
type
<cache eviction="FIFO" flushInterval="60000" readOnly="false" size="1024"/>
2.mapper文件
数据库
一级缓存
新会话
2.二级缓存
开启全局缓存
只关闭二级缓存
主配置文件里的:<setting name="cacheEnabled" value="true/false"/>
select标签
不使用二级缓存
useCache="true/false"
增删查改标签
两级缓存全部清空
执行完后清空缓存
flushCache="true/false"
手动清除当前会话的一级缓存
sqlSession.clearCache();
setting中的name属性
MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。\t\t默认值为 SESSION,会缓存一个会话中执行的所有查询。\t\t若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存(禁用一级缓存)。
本地缓存作用域
localCacheScope
3.缓存相关配置
9.缓存机制
根据条件得到不同的sql语句
1.概念
把if标签内的sql语句拼接到主sql语句后
不添加
判断条件
主sql语句<if test="条件">部分sql语句</if>
语法
<if>
添加where
or
and
去除多余语句
如果有条件成立
如果没有条件成立
主sql<if test="条件1">and sql</if><if test="条件2">or sql</if>
包含多个if标签
<where>
集合
数组
参数为
描述
遍历
<foreach collection="集合类型" item="集合中的成员" open="开始的字符" close="结束的字符" separator="集合成员间的分隔符"> #{集合中的成员}</foreach>
格式
实现
<foreach>
复用部分sql语句
定义sql代码片段
作用
<sql id="自定义名">sql语句、表名、字段等</sql>
定义
<include refid="id的值"/>
使用
步骤
<sql>
mybatis标签
2.实现
8.动态SQL
Integer
类型的全限定名
int
mybatis定义的别名
1.使用<typeAlias>标签
类名就是别名
2.使用<package name="包名"/>
在mybatis主配置文件中定义别名
别名
sql语句执行结果转换成的java对象类型
1.resultType
自定义列名和java对象属性名的对应关系
2.resultMap
1.as studentId
2.使用resultMap
3.列名和属性名不一致
1.在java代码里添加%作为参数
2.在mapper中拼接%
4.模糊查询
7.返回结果类型
mapper文件
传递参数
java代码
1.描述
String
java数据类型
简单类型参数
#{任意字符}
1.一个简单类型参数
@Param("自定义参数名")
#{自定义参数名}
2.多个简单类型参数
读取对象的属性值
#{对象属性名}
3.对象传参
#{0}
#{1}
mybatis3.4前
#{arg0}
#{arg1}
mybatis3.4后
4.位置传参
#{map的key}
5.Map传参
2.方式
?
#{}
代替
使用实际参数值
执行sql语句
PreparedStatement对象
更安全
防止sql注入
占位符
1.#
${}
替换
使用$包含的字符串
Statement对象
替换列名
排序
用于
无法防范sql注入
字符串替换
2.$
3.#和$的区别
6.传参方式
表示层
视图层
用户互动
接收请求
显示请求的数据
功能
界面层
计算数据
处理业务逻辑
业务逻辑层
持久层
数据库操作
数据访问层
1.哪三层
SpringMVC
Spring
Mybatis
2.对应框架
1.三层架构
Connection
Statement
ResultSet
自动创建
自动执行sql
java对象
List集合
自动处理查询结果集
自动关闭资源
增强的JDBC
得到数据
开发人员只需提供sql语句
操作数据库
3.MyBatis作用
mybatis
junit
数据库驱动
1.添加依赖
定义操作数据库方法
2.创建Dao接口
也叫mapper文件
写sql语句
3.创建sql映射文件
连接数据库
指定sql映射文件位置
4.创建mybatis主配置文件
5.使用mybatis的对象SqlSession
4.MyBatis使用步骤
创建Dao接口的实现类
调用dao接口方法
1.作用
SqlSessionFactory.openSession()
1.获取SqlSession对象
sqlSession.getMapper(接口.class)
2.使用getMapper方法获取Dao接口实现类
执行mapper文件中的sql语句
3.使用Dao接口的方法
2.使用方式
放到同一目录下
文件名一致
1.dao接口和mapper文件
等于dao接口的全限定名称
namespace属性值
<select>
<insert>
<delete>
<update>
sql标签
等于dao接口方法名
id属性值
不要使用重载方法
3.dao接口
3.使用要求
5.MyBatis动态代理
MyBatis
0 条评论
回复 删除
下一页