Mybatis学习笔记——第三天
程序员文章站
2024-03-14 09:43:22
...
Mybatis学习打卡
Mybatis学习笔记—第三天
Mybatis笔记 第三天
一.一对一关联关系数据的处理:student 和 computer
1. 在db里如何通过表的形式来存储数据和体现关系
2. Java类里体现一对一关系
3. 写dao (两个dao)
4. 给实现 ( 映射文件实现 )
- 没有关系属性的类对应的dao( ComputerDao ) — 单表操作
- 有关系属性的dao ( StudentDao ) — 增删改与单表一致, 查询特殊
二.多对多关系 student ~ course
1. 在db里建表 ( 存储数据本身 , 描述关系 )
2. 在java里通过实体类描述数据和关系
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200109193925326.png)
3. 定义dao接口?
- 如果直接描述多对多关系会导致 ”数据库里表的个数”与“实体类的个数”不对等 ,
一般情况下, 开发时只需要程序员提供”查询”业务 , 此时定义两个dao(针对两个
实体类定义)即可
①没有关系属性的dao — 单表查询操作
②有关系属性的dao — 表连接查询操作(多表连接查询 — 3张)
2) 如果业务里需要”增删改”功能 , 建议在业务需求分析时,直接将多对多拆分成两个
一对多( 通过添加一组中间的业务数据完成 )
三.动态sql — 依靠标签在映射文件中动态拼接sql命令
1. <if test=”boolean值”> ... </if>
条件判断标签
2. <where>
: 代替where命令 , 标签可以动态的根据情况去掉命令后的多余的and或者or
- 使用where标签
- 使用trim标签
3. <set>
标签 — 用在修改上
作用: 在修改时,去掉命令中多余的”,”
1)使用set标签
2) 使用标签
4. 关于<foreach>
标签
- 案例 : 批量删除
2) 解决
5. 总结 : 针对每个命令的特殊处理方法
- insert ( 如果插入null值) : #{ xxx , jdbcType=XXXX }
- update ( 如果更新时有null值 ) : 和
- delete ( 批量删除 ) : where xxx in(…)
- select ( 筛选条件为null的情况 ) : 和
四.Mybatis缓存
1. 什么是缓存? 好处
2. Mybatis里缓存的分类 — 提供缓存机制
1)一级缓存 : SqlSession级别的缓存( 默认提供 ) , sqlSession对象有一块缓存区域 ,
只要当前session执行过的sql命令结果会被缓存在自己的空间里, 不同
的session互不影响
2) 二级缓存 : mapper级别的缓存( 全局缓存 ) , mybatis为每一个namespace提供了一
块缓存区 , 不同session执行了同一个namespace里的查询命令, 结果都
会被缓存在”二级缓存里”
3. 二级缓存使用步骤
1)开启mybatis的二级缓存
2) 在当前的mapper文件里设置
4. 二级缓存的特点
1) 当session关闭时, session执行的查询结果会进入二级缓存
2) 当session调用了接口的增删改方法 并提交 , 则二级缓存会被清空