网站首页 > 技术文章 正文
Mybatis 一连串提问,被面试官吊打了?看这篇经典面试问题和MyBatis+MyBatis plus学习教程附后~
什么是 MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
MyBatis 是否支持延迟加载?延迟加载的原理是什么?
延迟加载的原理的是调用的时候触发加载,而不是在初始化的时候就加载信息。比如调用 a. getB(). getName(),这个时候发现 a. getB() 的值为 null,此时会单独触发事先保存好的关联 B 对象的 SQL,先查询出来 B,然后再调用 a. setB(b),而这时候再调用 a. getB(). getName() 就有值了,这就是延迟加载的基本原理。
说一下 MyBatis 的一级缓存和二级缓存?
一级缓存:基于 PerpetualCache 的 HashMap 本地缓存,它的声明周期是和 SQLSession 一致的,有多个 SQLSession 或者分布式的环境中数据库操作,可能会出现脏数据。当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认一级缓存是开启的。
二级缓存:也是基于 PerpetualCache 的 HashMap 本地缓存,不同在于其存储作用域为 Mapper 级别的,如果多个SQLSession之间需要共享缓存,则需要使用到二级缓存,并且二级缓存可自定义存储源,如 Ehcache。默认不打开二级缓存,要开启二级缓存,使用二级缓存属性类需要实现 Serializable 序列化接口(可用来保存对象的状态)。
开启二级缓存数据查询流程:二级缓存 -> 一级缓存 -> 数据库。
缓存更新机制:当某一个作用域(一级缓存 Session/二级缓存 Mapper)进行了C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。
MyBatis 分页插件的实现原理是什么?
分页插件的基本原理是使用 MyBatis 提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL,根据 dialect 方言,添加对应的物理分页语句和物理分页参数。
MyBatis 与 Hibernate 有哪些不同?
- Mybatis 和 hibernate 不同,它不完全是一个 ORM 框架,因为 MyBatis 需要
程序员自己编写 Sql 语句 - Mybatis 直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高,非常
适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需
求变化要求迅速输出成果。但是灵活的前提是 mybatis 无法做到数据库无关性,
如果需要实现支持多种数据库的软件,则需要自定义多套 sql 映射文件,工作量大。 - Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的
软件,如果用 hibernate 开发可以节省很多代码,提高效率。
Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
第一种是使用标签,逐一定义数据库列名和对象属性名之间的映射关系。
第二种是使用 sql 列的别名功能,将列的别名书写为对象属性名。
有了列名与属性名的映射关系后,Mybatis 通过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。
#{}和${}的区别是什么?
- #{}是预编译处理,${}是字符串替换。
- Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值;
- Mybatis 在处理{}时,就是把${}替换成变量的值。
- 使用#{}可以有效的防止 SQL 注入,提高系统安全性。
Mybatis 动态 sql 有什么用?执行原理?有哪些动态 sql?
Mybatis 动态 sql 可以在 Xml 映射文件内,以标签的形式编写动态 sql,执行原理 是根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。
Mybatis 提供了 9 种动态 sql 标签:trim | where | set | foreach | if | choose | when | otherwise | bind。
get MyBatis面试题还是要在会的基础上理解操作过才能更清楚,下面是补课时间,哪里不会点哪里~
- 黑马程序员Springmvc+Mybatis由浅入深全套视频教程day01_哔哩哔哩_bilibili
- mybatis入门程序-根据id查询用户-映射文件
- mybatis入门程序-根据id查询用户-程序代码
- mybatis入门程序-根据id查询用户-程序调试
- mybatis入门程序-根据名称查询用户
- mybatis入门程序-查询用户小结
- mybatis入门程序-添加用户
- mybatis入门程序-添加用户-主键返回
- mybatis入门程序-删除用户和更新用户
- mybatis和hibernate的本质区别和应用场景
- mybatis开发dao方法-sqlSession应用场合
- mybatis开发dao方法-原始dao开发方法
- mybatis开发dao方法-原始dao开发方法-问题总结
- mybatis开发dao方法-mapper代理开发方法-开发规范
- mybatis开发dao方法-mapper代理开发方法-实现
- mybatisplus可以说是mybatis的加强版;
mybatis是一个优秀的持久性框架,它简化了 jdbc的代码,可以使用简单的xml 或注解来配置来映射;mybatisplus是 mybatis的增强工具,它在mybatis的基础上又添加了许多的功能,在mybatisplus 上既可以使用自身特有的功能,还可以使用mybatis的原生功能;
mybatisplus是为简化开发,提高效率而生,卷一卷
黑马程序员MybatisPlus深入浅出教程,快速上手mybatisplus_哔哩哔哩_bilibili
- 了解Mybatis-Plus之简介
- 了解Mybatis-Plus之特性
- 了解Mybatis-Plus之架构
- Mybatis-Plus快速开始之搭建工程
- Mybatis+MP实现查询User
- Spring+Mybatis+MP实现查询
- 快速开始之实现查询User
- 通用CRUD详解之插入操作
- tableField注解详解
- 通用CRUD详解之根据id更新
- 通用CRUD详解之根据条件更新
- 通用CRUD详解之删除操作
- 删除操作(deleteByMap)
- 通用CRUD详解之删除操作(delete)
- 删除操作(deleteBatchIds)
- 查询操作(selectById)
- 查询操作(selectBatchIds)
- 查询操作(selectOne)
- 查询操作(selectCount)
- 查询操作(selectList)
- 查询操作(selectPage)
- SQL注入的原理
- Mybatis-Plus配置之基本配置)
- Mybatis-Plus配置之进阶配置
- Mybatis-Plus条件构造器之逻辑查询
- Mybatis-Plus之ActiveRecord简介
- Mybatis-Plus之ActiveRecord开启AR之旅
- Mybatis-Plus之ActiveRecord新增数据
- Mybatis-Plus之ActiveRecord更新数据
- Mybatis-Plus之ActiveRecord删除数据
- Mybatis-Plus之ActiveRecord根据条件查询数据
- Mybatis-Plus之Oracle 主键Sequence(部署Oracle环境)
- Mybatis-Plus之Oracle 主键Sequence(创建表以及安装驱动包到本地仓库)
- Mybatis-Plus之Oracle 主键Sequence(编码实现序列的使用)
- Mybatis-Plus之插件(mybatis的插件机制)
- Mybatis-Plus之插件(mybatis的插件机制 补充)
- Mybatis-Plus之插件(执行分析插件)
- Mybatis-Plus之插件(性能分析插件)
- Mybatis-Plus之插件(乐观锁插件)
- Mybatis-Plus之插件(乐观锁插件的特别说明)
- Mybatis-Plus之Sql 注入器(编写MyBaseMapper、MySqlInjector)
- Mybatis-Plus之Sql 注入器(测试以及改进)
- Mybatis-Plus之自动填充功能
- Mybatis-Plus之逻辑删除
- Mybatis-Plus之通用枚举
- Mybatis-Plus之代码生成器
- MybatisX 快速开发插件
今天先整理这些,喜欢收藏,也可以关注哦,三宝每篇都给你惊喜~
猜你喜欢
- 2024-11-13 常见springboot面试题和答案 项目经理面试常见问题及答案
- 2024-11-13 这几道 Java 面试题,虐哭了多少人
- 2024-11-13 Java虚拟机经典面试题 面试java虚拟机及调优
- 2024-11-13 MySQL数据库面试题(2020最新版)(一)
- 2024-11-13 Spring系列面试题 spring面试题2021
- 2024-11-13 90后小伙以这196道MySQL面试题,实力吊打面试官,生生挤进大厂
- 2024-11-13 mysql常见面试题 mysql经典面试题及答案
- 2024-11-13 超详细的Spring源码系列面试题集锦(推荐)
- 2024-11-13 求职必备——Java面试题总结及答案汇总
- 2024-11-13 50道MySQL数据库面试基础问答题 mysql经典面试题
你 发表评论:
欢迎- 614℃几个Oracle空值处理函数 oracle处理null值的函数
- 605℃Oracle分析函数之Lag和Lead()使用
- 593℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 591℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 585℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 579℃【数据统计分析】详解Oracle分组函数之CUBE
- 568℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 559℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- PageHelper - 最方便的 MyBatis 分页插件
- 面试二:pagehelper是怎么实现分页的,
- MyBatis如何实现分页查询?(mybatis-plus分页查询)
- SpringBoot 各种分页查询方式详解(全网最全)
- 如何在Linux上运行exe文件,怎么用linux运行windows软件
- 快速了解hive(快速了解美国50个州)
- Python 中的 pyodbc 库(pydbclib)
- Linux搭建Weblogic集群(linux weblogic部署项目步骤)
- 「DM专栏」DMDSC共享集群之部署(一)——共享存储配置
- 故障分析 | MySQL 派生表优化(mysql pipe)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)