Mybatis:

  • 可以说是半个ORM(对象关系映射)的持久层框架,其内部进行对JDBC的封装,在开发是只需要关注SQL语句的优化问题等,没有必要进行频繁的驱动加载、数据库连接、创建statement等操作。
  • 通过注解和XML两种方式映射原生信息(实体类与数据库表的映射)
  • 优点:(1)编写SQL非常灵活,接触SQL与程序的耦合,支持动态SQL(if,choose,trim,when,otherwise,foreach等标签),可重用性高。(2)代码量少,消除JDBC的代码冗余,自动资源的开关。(3)兼容性强,可以市面上大多数的数据库软件整合使用。(4)能与Spring很好的集成,提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象组件的维护。
  • 缺点:SQL依赖数据库,造成数据库可移植性不好,不能随意更换数据库

Mybatis的执行过程

mybatis的底层原理就是:动态代理;本质就是:反射机制

#{ }与${}的区别:

#{} 是预编译处理,${}是字符串的替换。
Mybatis处理#{}是,将它替换成问号?,在调用PreparedStatement的set方法进行赋值;而 $ { }只是将里面的值替换成变量的值。
还有就是#{}能防止SQL的注入,提高系统安全性。

实体类中的属性名与表中的字段不一致时怎么办:

  1. 通过在SQL语句定义字段名的别名,让字段名的别名与实体类的属性名一直就行了。
  2. 通过映射字段名和实体属性名一一对应就行了。在resultMap中使用id属性映射主键字段,使用result属性映射非主键字段,其中property是实体类的属性名称,column是数据库表的字段名。

分页:

使用RowBounds对象进行分页,
使用第三方插件分页(pageHelper)

1对1的操作

联合查询:几张表进行联合查询,只进行一次,通过resultMap中的association配置1对1的类即可
嵌套查询:先查一张表,再根据这个表的结果里的id再去查询另一张表的内容,也是通过association配置,但是另一张就是普通的select的。

Mybatis缓存

  • MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。
  • MyBatis系统中默认定义了两级缓存:一级缓存二级缓存
    • 默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存)
    • 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。
    • 为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存

一级缓存:

基于PerpetualCache的HashMap本地缓存,它的声明周期和SqlSession一致,有许多SqlSession或者分布式的环境中数据库操作,可能出现脏读数据。当Session flush或者close之后,该Session中的所有缓存就被清空,默认一级缓存是被开启的。

二级缓存

  • 二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存
  • 基于namespace级别的缓存,一个名称空间,对应一个二级缓存;
  • 工作机制
    • 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中;
    • 如果当前会话关闭了,这个会话对应的一级缓存就没了;但是我们想要的是,会话关闭了,一级缓存中的数据被保存到二级缓存中;
    • 新的会话查询信息,就可以从二级缓存中获取内容;
    • 不同的mapper查出的数据会放在自己对应的缓存(map)中;
  • 开启二级缓存数据查询流程:二级缓存 -> 一级缓存 -> 数据库。
  • 缓存更新机制:当某一个作用域(一级缓存 Session/二级缓存 Mapper)进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。

明月学Mybatis:小结(一)相关推荐

  1. java学mybatis还用学jdbc吗,mybatis系统学习(二)——使用基础mybatis代替原始jdbc

    mybatis系统学习(二)--使用基础mybatis代替原始jdbc 前言 这一篇笔记的内容应当是建立在上一篇的基础之上,不论是使用的数据表,还是对应的实体类,都在上一篇有过说明. 有兴趣的或者对相 ...

  2. 【Mybatis框架】从零开始学Mybatis框架——使用示例

    一.数据库SQL 命令 1.创建数据库,并指定编码 Create database ssm default character set utf8 2.创建表 Create table 表名(列名类型约 ...

  3. Java Persistence with MyBatis 小结2

    MyBatis 最关键的组成部分是 SqlSessionFactory,我们可以从中获取 SqlSession,并执行映射的 SQL 语句.SqlSessionFactory 对象可以通过基于 XML ...

  4. mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)

    博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长,文章底部有面试题. 入参映射关键字说明 图中para ...

  5. mybatis 批量提交清除缓存_重学Mybatis(三)-------缓存 (含面试题)

    博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长,文章底部有面试题. mybatis的一级缓存 myb ...

  6. 阿里架构阿里架构师手把手带你学Mybatis开源ORM框架“

    简介 前段时间利用空闲时间,参照mybatis的基本思路手写了一个ORM框架.一直没有时间去补充相应的文档,现在正好抽时间去整理下.通过思路历程和代码注释,一方面重温下知识,另一方面准备后期去完善这个 ...

  7. 一起学 mybatis 基础教程

    我也才刚刚开始学习mybatis 有很多不懂得地方和大家探讨,准备把我自己学习mybatis的一些心得和大家分享. mybatis 基本教程 mybatis + maven 环境搭建 mybatis ...

  8. 在学期初小结本学期要做的事情

    第一个学期勉强达到了最低要求,第二个学期就可以尝试浪一下了. (1)数分2以及高代2:主要内容是多元微积分以及Jordan标准型.双线性型等等.常规内容继续跟进. (2)初等数论(旁听):主教材是冯克 ...

  9. 跟我一起学mybatis框架Ⅰ

最新文章

  1. Java虚拟机性能监控工具草览
  2. R语言效用分析 ( 效能分析、Power analysis)确定样本量、假设检验与两类错误、pwr包进行效用分析 ( 效能分析、Power analysis)的常用函数列表
  3. vim与gvim技巧大全
  4. BigDecimal的使用举例,包括阶乘的相加求法思路
  5. python内置数据结构字符串
  6. Factom(公证通)--基于区块链的存证系统
  7. SQL Server中常用全局变量介绍
  8. 接口测试人员需要掌握的知识技能
  9. 谷歌为开源的漏扫工具“海啸“发布新的补丁奖励计划
  10. linux shell 之 crontab(定时任务)详解
  11. SQLServer2019安装教程
  12. 单片机矩阵键盘c语言程序,stc89c52单片机下的矩阵键盘程序
  13. 在java中定义标示符_JAVA中定义标识符时可以使用系统保留的关键字。
  14. 安装CommonAPI
  15. 图文讲解 WiFi 驱动移植过程,很肝~
  16. 借助方便的工具平台,让App制作变简单
  17. 将工件模型(stp,stl等)转为均匀稠密点云(pcd,ply)
  18. 关于GMac和FLOPs讨论
  19. C#最小二乘法进行曲线拟合及相关系数
  20. ECS 无法解析域名问题场景分析

热门文章

  1. 资料链接--韦东山和尚观
  2. 上下五千年。。成功之路。。。都离不开老庄孙子。。。只看楼主 收藏 回复
  3. 摄影后期用计算机配置,值得参考 最适合摄影师的电脑配置是什么
  4. mvc 模型验证及正则表达式
  5. 如何做好原始记录,需要特别注意的四个方面
  6. 所见即所得:memoQ独立预览先人一步
  7. 【游戏建模】zbrush的15个雕刻小技巧
  8. SCAU 计算智能 18290 校赛排名2
  9. 【开发日常】【uboot】 -- uboot下的常用命令解析
  10. python如何进行进制转换