MyBatis小总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t1g2q3/article/details/84893550

MyBatis小总结

  • 简介
    • ①MyBatis 是一款持久层框架,它支持定制化 SQL、存储过程以及高级映射。
    • ②MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
    • ③MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录
  • 架构图

https://img.mubu.com/document_image/fb0b01b9-b144-422f-8788-352937f9da52-67246.jpg

  • 使用
    • 编程式
    • 集成式(Spring)
    • 工作中使用的方式
      • 分析业务-定义表结构-generator自动生成
      • 注意:企业级开发不允许使用Example方式
  • 生命周期
    • SqlSessionFactoryBuilder-method
    • SqlSessionFactory-application
    • SqlSession-request/methos/thread
    • Mapper-method
    • 注意:Spring集成MyBatis时Mapper的生命周期
    • 建议:代码生成器独立一个包,生成后复制即可,防止覆盖自定义SQL
  • 配置文件
    • http://www.mybatis.org/mybatis-3/zh/configuration.html
    • 获取自增主键
      • use
    • 延迟加载解决N+1问题
    • 动态SQL
      • 解决批量插入问题
    • 缓存(参考美团技术分享:https://blog.csdn.net/m0_37276008/article/details/79889423
      • 一级缓存
        • ①MyBatis一级缓存的生命周期和SqlSession一致。
        • ②MyBatis一级缓存内部设计简单,只是一个没有容量限定的HashMap,在缓存的功能性上有所欠缺。
        • ③MyBatis的一级缓存最大范围是SqlSession内部,有多个SqlSession或者分布式的环境下,数据库写操作会引起脏数据,建议设定缓存级别为Statement。
      • 二级缓存
        • ①MyBatis的二级缓存相对于一级缓存来说,实现了SqlSession之间缓存数据的共享,同时粒度更加的细,能够到namespace级别,通过Cache接口实现类不同的组合,对Cache的可控性也更强。
        • ②MyBatis在多表查询时,极大可能会出现脏数据,有设计上的缺陷,安全使用二级缓存的条件比较苛刻。
        • ③在分布式环境下,由于默认的MyBatis Cache实现都是基于本地的,分布式环境下必然会出现读取到脏数据,需要使用集中式缓存将MyBatis的Cache接口实现,有一定的开发成本,直接使用Redis,Memcached等分布式缓存可能成本更低,安全性也更高。
    • #{}预编译
      • 防止sql注入攻击
    • 自定义拦截器
      • 管理后台框架中自定义了拦截器进行分页操作
      • 链路追踪记录执行时间
  • 最佳实践
    • ①分页
      • 逻辑分页:内存中分页
      • 物理分页:limit
      • MyBatis PagHelper插件
    • ②批量操作
      • for循环
      • foreach动态SQL(推荐)
      • ExecutorType.Batch
    • ③嵌套结果和嵌套查询
  • 设计模式-动态代理

猜你喜欢

转载自blog.csdn.net/t1g2q3/article/details/84893550