明月学Mybatis:小结(一)
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的注入,提高系统安全性。
实体类中的属性名与表中的字段不一致时怎么办:
- 通过在SQL语句定义字段名的别名,让字段名的别名与实体类的属性名一直就行了。
- 通过映射字段名和实体属性名一一对应就行了。在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:小结(一)相关推荐
- java学mybatis还用学jdbc吗,mybatis系统学习(二)——使用基础mybatis代替原始jdbc
mybatis系统学习(二)--使用基础mybatis代替原始jdbc 前言 这一篇笔记的内容应当是建立在上一篇的基础之上,不论是使用的数据表,还是对应的实体类,都在上一篇有过说明. 有兴趣的或者对相 ...
- 【Mybatis框架】从零开始学Mybatis框架——使用示例
一.数据库SQL 命令 1.创建数据库,并指定编码 Create database ssm default character set utf8 2.创建表 Create table 表名(列名类型约 ...
- Java Persistence with MyBatis 小结2
MyBatis 最关键的组成部分是 SqlSessionFactory,我们可以从中获取 SqlSession,并执行映射的 SQL 语句.SqlSessionFactory 对象可以通过基于 XML ...
- mybatis foreach map_重学Mybatis(六)-------输入映射(含面试题)
博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长,文章底部有面试题. 入参映射关键字说明 图中para ...
- mybatis 批量提交清除缓存_重学Mybatis(三)-------缓存 (含面试题)
博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长,文章底部有面试题. mybatis的一级缓存 myb ...
- 阿里架构阿里架构师手把手带你学Mybatis开源ORM框架“
简介 前段时间利用空闲时间,参照mybatis的基本思路手写了一个ORM框架.一直没有时间去补充相应的文档,现在正好抽时间去整理下.通过思路历程和代码注释,一方面重温下知识,另一方面准备后期去完善这个 ...
- 一起学 mybatis 基础教程
我也才刚刚开始学习mybatis 有很多不懂得地方和大家探讨,准备把我自己学习mybatis的一些心得和大家分享. mybatis 基本教程 mybatis + maven 环境搭建 mybatis ...
- 在学期初小结本学期要做的事情
第一个学期勉强达到了最低要求,第二个学期就可以尝试浪一下了. (1)数分2以及高代2:主要内容是多元微积分以及Jordan标准型.双线性型等等.常规内容继续跟进. (2)初等数论(旁听):主教材是冯克 ...
- 跟我一起学mybatis框架Ⅰ
最新文章
- Java虚拟机性能监控工具草览
- R语言效用分析 ( 效能分析、Power analysis)确定样本量、假设检验与两类错误、pwr包进行效用分析 ( 效能分析、Power analysis)的常用函数列表
- vim与gvim技巧大全
- BigDecimal的使用举例,包括阶乘的相加求法思路
- python内置数据结构字符串
- Factom(公证通)--基于区块链的存证系统
- SQL Server中常用全局变量介绍
- 接口测试人员需要掌握的知识技能
- 谷歌为开源的漏扫工具“海啸“发布新的补丁奖励计划
- linux shell 之 crontab(定时任务)详解
- SQLServer2019安装教程
- 单片机矩阵键盘c语言程序,stc89c52单片机下的矩阵键盘程序
- 在java中定义标示符_JAVA中定义标识符时可以使用系统保留的关键字。
- 安装CommonAPI
- 图文讲解 WiFi 驱动移植过程,很肝~
- 借助方便的工具平台,让App制作变简单
- 将工件模型(stp,stl等)转为均匀稠密点云(pcd,ply)
- 关于GMac和FLOPs讨论
- C#最小二乘法进行曲线拟合及相关系数
- ECS 无法解析域名问题场景分析