Mybatis
- Mybatis由来
- JDBC问题分析:
- 1.数据库配置信息存在硬编码问题
- 2.频繁创建释放数据库连接
- 3.sql语句硬编码
- 4.手动封装结果集
- Mybatis解决
- 1.配置文件
- 2.连接池
- 设计自定义持久层框架思路
- 使用端(项目):引入自定义持久层框架jar包
- 提供配置信息:连接和sql,参数等
- 使用配置文件提供
- 1):sqlMapConfig.xml:存放连接信息
- 2):mapper.xml:存放sql配置
- 框架本身:对JDBC封装
- 1.加载配置文件:根据配置文件的路径,加载配置文件成字节输入流,存在内存中
- 创建Resoureces类 方法:getResourceAsSteam(String path)
- 2.创建2个javaBean: 容器对象存放配置文件解析的内容
- Configuration:核心配置类 存放sqlMapconfg.xml
- MappedStatement:映射配置类 存放mapper.xml
- 3.解析配置文件:dom4j
- 创建类:SqlSessionFactoryBuilder 方法 build(InputSteam in)
- 第一:使用dom4j解析配置文件,将解析出来的内容封装到容器对象中
- 第二:创建SqlSessionFactory对象:生产sqlSession:会话对象(工厂模式)
- 4.创建sqlSessionFactory接口以及实现类DefaultSqlSessionFactory
- 第一:openSession():生产sqlSession
- 5.创建SqlSessionFactory接口实现类DefaultSqlSessionFactory
- Mybatis 缓存
- 一级缓存:作用域是sqlsession,缓存结构为hashmap 增删改操作会刷新缓存,一级缓存缓存对象
- 二级缓存:作用域是mapper,namespace级别,需要手动开启
- 二级缓存存的是数据不是对象,对象需要实现序列化接口,因为可能存在硬盘,需要反序列化,增删改会清空缓存
- 无法实现分布式缓存,所以一般用redis/memcached/ehcache代替
- 可以实现mybatis与redis整合----mybatis-redis包
- 也是hashmap结构
- 二级缓存大量运用装饰者模式,如cachingExecutor以及各种Cache接口的装饰器
- Mybatis 插件
- 利用动态代理拦截四大对象处理器Executor/statementhandler/parameterhandler/resulthandler
- 插件继承interceptor
- 注解@intercepts拦截核心对象的方法
- intercepor
- 分页插件 pagehelper
- 通用mapper
- 分布式系统架构
- 强一致性,弱一致性,最终一致性
- CAP定理
- 1一致性2.可用性3.分区容错性
- 分布式系统不可能同时满足三点
- BASE理论
- 两阶段提交协议2PC:比较常用的分布式事务问题解决方式
- 阶段一:事务询问,执行事务不提交,返回成功
- 阶段二:提交或者回滚事务
- 问题:
- 1.同步阻塞2.单点问题3.数据不一致4.过于保守
- 三阶段提交协议3PC:可超时