一 : 延迟加载
(一) 概述
需要用到数据的时候就加载, 不需要的时候就不加载
懒加载
(二) 优缺点
优点: 因为嵌套查询是发送两条sql, 如果关联的数据不需要, 那么则不需要发送第二条sql, 相较于连表查询性能提高很多, 因为单表查询的速度是优于连表查询的
缺点: 如果关联数据需要, 第二条sql就会被发送, 由于第二张表的数据量很大, 会造成响应时间过长, 用户体验不佳
(三) 小建议
对多的情况: 采用懒加载
对一的情况: 可以采用即刻加载
(四) 实现
按需加载, 如果只是需要用户信息, 则不会去查询订单信息, 如果需要订单信息, 则会查
fetchType的优先级要高于lazyLoadingEnabled
二 : 缓存机制
缓存的目的: 降低数据库压力
Mybatis 使用到了两种缓存:本地缓存(local cache)和二级缓存(second level cache)。
(一) 本地缓存
本地缓存也称为一级缓存
每当一个新 session 被创建,MyBatis 就会创建一个与之相关联的本地缓存。任何在 session 执行过的查询结果都会被保存在本地缓存中,所以,当再次执行参数相同的相同查询时,就不需要实际查询数据库了。
本地缓存将会在做出修改、事务提交或回滚,以及关闭 session 时清空。
本地缓存的生命周期等同于session的生命周期
本地缓存无法完全关闭(禁用)
手动清空本地缓存
(二) 二级缓存
在需要实现二级缓存的配置文件中添加标签
二级缓存需要做数据流转, 所以需要我们的实体类实现序列化接口
需要关闭sqlSession才能实现二级缓存, 也就是说, 我们查出来的girl的数据, 做的是数据转移而不是复制
三 : 逆向工程
(一) 作用
可以根据数据库生成pojo, mapper接口, mapper映射配置文件
只能做单表操作,
连表查询, 嵌套查询, 懒加载, 缓存优化仍然需要我们自己手动实现
(二) 实现
- 添加依赖
- 编写入口函数
- 编写配置文件
(三) 注意 - 逆向工程一般只在项目开发初期的时候使用, 版本迭代的时候严禁使用
- 只能做单表操作, 复杂的功能还是需要我们编写复杂的sql语句来实现
四 : 注解开发
(一) 新增
(二) 修改
(三) 删除
(四) 查询所有
(五) 根据id查询
(六) 对多
(七) 对一
(八) 小结
-
常用注解
@Select
@Insert
@Update
@Delete
@Results
@Result
@One
@Many -
注解适用于处理简单的功能
五 : 配置文件回顾
(一) 别名
typeAliases
typeAliase 类的全限定名 --> 别名
Package --> 包名
(二) 环境
transactionManager
Jdbc
Managed —> 啥也没干
dataSource – type
Unpooled
Pooled —> 连接池
JNDI --> 几乎不用
(三) 映射器
Resource
Url
Class
Package --> 包名