文章目录

  • Mybatis开发流程
    • 传统开发简要流程
    • 接口代理开发简要流程
      • 接口开发六点注意事项
  • sqlMapperConfig 核心配置文件
  • mybatis相关API
  • 输入输出映射
  • 常用动态Sql标签
  • 分步查询
  • 延迟加载
    • 延迟加载失效的情况
    • 延迟加载原理
  • 缓存机制
    • 一级缓存工作机制
    • 二级缓存机制
  • 注解开发常用注解

Mybatis开发流程

传统开发简要流程

  1. 导入mybatis依赖

  2. 配置mybatis-config.xml

  3. 配置mapper.xml

  4. 定义接口及其实现类

接口代理开发简要流程

  1. 导入mybatis依赖
  2. 配置mybatis-config.xml
  3. 配置mapper.xml
  4. 定义接口

接口开发六点注意事项

  1. 映射文件目录与接口所在目录一致 (不一致需要 指定地址 mapper-locations:classpath: )

  2. 映射文件名与接口名一致

  3. namespace设置为接口的全限定类名

  4. id 为接口方法名一致

  5. parameterType应与接口形参类型一致 (一般不写 ,写就要写对)

  6. resultType与接口方法返回值类型一致

sqlMapperConfig 核心配置文件

mybatis相关API

输入输出映射

如果数据库表字段名称和实体类属性名称不一致,那么可以使用三种方式解决:设置别名、设置 驼峰规则、resultMap。

常用动态Sql标签

动态sql执⾏原理1. SqlResource
该接⼝含义是作为sql对象的来源,通过该接⼝可以获取sql对象。其唯⼀的实现类是
XmlSqlResource,表示通过xml⽂件⽣成sql对象。2. Sql
该接⼝可以⽣成sql语句和获取sql相关的上下⽂环境(如ParameterMap、ResultMap等),有三个
实现类: RawSql表示为原⽣的sql语句,在初始化即可确定sql语句;SimpleDynamicSql表示简单
的动态sql,即sql语句中参数通过$property$⽅式指定,参数在sql⽣成过程中会被替换,不作为
sql执⾏参数;DynamicSql表示动态sql,即sql描述⽂件中包含isNotNull、isGreaterThan等条件
标签。3. SqlChild
该接⼝表示sql抽象语法树的⼀个节点,包含sql语句的⽚段信息。该接⼝有两个实现类: SqlTag表
示动态sql⽚段,即配置⽂件中的⼀个动态标签,内含动态sql属性值(如prepend、property值 等);SqlText表示静态sql⽚段,即为原⽣的sql语句。每条动态sql通过SqlTag和SqlText构成相应的
抽象语法树。4. SqlTagHandler
该接⼝表示SqlTag(即不同的动态标签)对应的处理⽅式5. SqlTagContext
⽤于解释sql抽象语法树时使⽤的上下⽂环境。通过解释语法树每个节点,将⽣成的sql存⼊
SqlTagContext。最终通过SqlTagContext获取完整的sql语句。

分步查询

什么是分步查询 : 概念:将一次多表查询拆分多次单表查询 为延迟加载做铺垫

延迟加载

MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。

例如在进行一对多查询的时候,只查询出一方,当程序中需要多方的数据时,mybatis再发出sql语句进行查询,这样子延迟加载就可以的减少数据库压力。

MyBatis 的延迟加载只是对关联对象的查询有迟延设置,对于主加载对象都是直接执行查询语句的。

注意:延迟加载的应用要求:关联对象的查询与主加载对象的查询必须是分别进行的select语句,不能

是使用多表连接所进行的select查询

延迟加载失效的情况

对象调用 toString  hashcode   equals 等方法都会使的延迟加载失效

延迟加载原理

使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用A.getB().getName(),拦截器invoke()方法发现A.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用A.setB(b),于是a的对象b属性就有值了,接着完成A.getB().getName()方法的调用。

缓存机制

好处:减少了数据库的查询次数,提高了执行效率

坏处:影响了数据的时效性,会产生脏数据

二级缓存默认是关闭的,当设置了cacheEnabled=true后,在mapper.xml中设置cache标签就会去创建一个cacah对象,所以同一个mapper的mapperStatement公用同一个cache对象

一级缓存工作机制

一级缓存 是 SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构用于存储缓存数据。不同的sqlSession之间的缓存数据区域是互相不影响的。也就是他只能作用在同一个sqlSession中,不同的sqlSession中的缓存是互相不能读取的

二级缓存机制


二级缓存是 mapper 级别的缓存,多个 SqlSession 去操作同一个Mapper的sql语句,多个 SqlSession可以共用二级缓存,二级缓存是跨 SqlSession 的。UserMapper有一个二级缓存区域(按 namespace 划分),每个 mapper 也有自己的二级缓存区域(按namespace分)。每一个 namespace 的 mapper 都有一个二级缓存区域,如果相同两个 mapper 的 namespace ,这两个mapper执行sql查询到数据将存在相同的二级缓存区域中。

注解开发常用注解

Mybatis 核心知识点整理成图相关推荐

  1. 06-JAVA面试核心知识点整理(时间较多的同学全面复习)

    JVM (1) 基本概念: JVM是可运行Java代码的假想计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回收,堆 和 一个存储方法域.JVM 是运行在操作系统之上的,它与硬件没有直接的 ...

  2. 最全最新的的Java核心知识点整理!!! 【推荐】

    前言: 想要文档版的小伙伴们可以私信我领取哦,更加清晰 一目了然 ~ Java核心知识点! 博客整理出来的稍微有点乱~ 目录 目录 -1 JVM - 19 2.1. 线程 - 20 2.2. JVM ...

  3. Java程序员必备核心知识点整理,建议收藏!

    说实话,作为一名 Java 程序员,不论你需不需要面试都应该好好看下这份资料.我大概撸了一遍,真的是堪称典范. 就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常 ...

  4. 信息系统项目管理师-知识产权、项目收尾、标准规范核心知识点思维脑图

    场景 信息系统知识产权.项目收尾.标准规范有关的核心知识整理. 实现 知识产权 收尾管理 软件工程国家标准 注: 博客: https://blog.csdn.net/badao_liumang_qiz ...

  5. 信息系统项目管理师-合同法、著作权、招标投标法实施条例核心知识点思维脑图

    场景 信息系统合同法.著作权.招投标实施条例有关的核心知识整理. 实现 合同法 著作权法 招投标法实施条例 注: 博客: https://blog.csdn.net/badao_liumang_qiz ...

  6. 信息系统项目管理师-信息系统成本管理核心知识点思维脑图

    场景 信息系统项目成本管理有关的知识整理. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免 ...

  7. 信息系统项目管理师-信息系统进度管理核心知识点思维脑图

    场景 信息系统项目进度管理有关的知识整理. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免 ...

  8. 信息系统项目管理师-信息系统范围管理核心知识点思维脑图

    场景 信息系统项目范围管理有关的知识整理. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免 ...

  9. 信息系统项目管理师-信息系统项目整体管理核心知识点思维脑图

    场景 信息系统项目整体管理有关的知识整理. 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免 ...

最新文章

  1. 如何高效地爬取链家的房源信息(三)
  2. 大型三甲医院管理系统源码PACS超声科室源码DICOM影像工作站
  3. Oozie基于Hue全流程调度
  4. 安卓在代码中设置TextView的drawableLeft、drawableRight、drawableTop、drawableBottom
  5. awk使用shell中的变量
  6. Jzoj5429 排列
  7. 防火墙(15)——SNAT和DNAT,SNAT实践
  8. 解决:jsp 页面不全,response 内容不完整
  9. 图片随鼠标滚动而任意浮动
  10. 工作没做好,别人指出时最好装聋作哑
  11. Javascript 高级程序设计笔记 (cha5 引用类型)
  12. mysql 收货地址表_会员收货地址 - 数据库设计 - 数据库表结构 - 果创云
  13. python寻峰,寻找峰值
  14. Tecplot绘制流体后处理图的问题
  15. Socket长连接和短连接的区别
  16. 《蜗居:心理健康枕边书》摘录
  17. saas商业模式和架构设计
  18. python:24点游戏
  19. 达文教育2022年John Locke主题讲座再度来袭
  20. win10monkey安装教程_详解win10下pytorch-gpu安装以及CUDA详细安装过程

热门文章

  1. excel 画散点图 怎么设置图片的分辨率_【R语言】barplot柱状图+散点图+误差棒
  2. 二叉树:二叉树视频笔记
  3. SharePoint2010资源库-视频库的使用
  4. 淘宝网禁售无证食品和保健品 问题商品将被屏蔽
  5. html评价标准展示,网页设计评分标准.doc
  6. 计算机英语构词法,【计算机专业论文】计算机专业英语的构词方法(共2969字)
  7. glTF-Transform处理gltf模型
  8. springboot项目在cmd窗口运行后台卡顿问题
  9. 系统动力学专拓考试重点总结
  10. python数字华容道