Mybatis

73 阅读2分钟
  • 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:可超时