Mybatis
# Mybatis
# mybatis 一级缓存和二级缓存
tag:
美团、卓望、数字马力、宁波银行count:6
- 一级缓存:基于 PrepetualCache 的 HashMap 的本地缓存,是默认开启的,其作用域就是 Session,当 Session 进行了 Close,Flush 后该 Session 中的缓存会被全部清空。
- 二级缓存:其作用域是 namespace 和 mapper,其默认是不开启的,是基于 prepetualCache,hashmap 存储的。通过在 mybatis 的配置文件中设置 CacheEnabled 设置为 true, 在对应的 mapper 中添加标签 Cache。
# 二级缓存什么时候清理
当某个作用域 (一级缓存 (session)/ 二级缓存 (namespace)) 中进行了增删改操作时就会清除掉 select 中的缓存。
# mybatis sqlsession 是怎么管理的
tag:
美团count:1
# mybatis 类似的事务层框架了解吗?
tag:
快手count:1
as:
jap 和 hibernate
# mybatis 分页
tag:
快手、立白、百度count:6
as:怎么配置 mybatis 插件比如说分页插件,批处理插件这些
分页实现原理,怎么优化
MyBatis 的分页是内存分页还是物理分页,分页插件的实现原理
# mybatis 中# 和 $ 的区别
tag:
联想、卓望、数字马力、亚信count:15
as:mysql 传递参数用的符号 #与 $ 的 sql 拼接区别
mybatis 预编译
- #{} 主要就是做占位符的替换的,在 mybatis 中会使用 **? 占位 **,而 ${} 主要就是做文本替换的。替换 ${} 中的文本。
- #{} 数据的替换发生在 DBAS 之中,而 ${} 数据替换发生在 DBAS 之外。
- #{} 在做数据替换的时候会自动添加 '',而 ${} 数据替换的时候不会自动添加 ''。
- #{} 可以防止 SQL 的注入,而 ${} 不可以。
# MyBatis 传参有几种方式
tag:
贝壳count:2
as:MyBatis 传参有哪几种方式,有什么区别
# 动态标签
tag:
数字马力、亚信count:4
as:动态 sql if,foreach 这些使用要引入什么配置吗?
mybatis 的基本标签有多少?
# 拦截器
tag:
count:1
as:mybatis 的拦截器了解吗
# mybatis 原理
tag:
用友、快手count:6
as:myBatis 的底层原理了解过吗包括它怎么去用,缓存构造器了解过吗
MyBatis 的 sql 执行原理 (核心是代理)
mybatisplus 是怎么实现 save、insert、select、delete 的操作的,底层原理是什么
# mybatis 有哪些设计模式
tag:
用友count:1
as:
# mybatis 和 mybatis plus 的区别?
tag:
count:6
as:mybatis 和 mybatis plus 的区别?平时用哪个多?
为什么用 mybatis,除了 mybatis 还有什么 orm 框架,mybatis 和 hibernate 优缺点,如果给你优化 mybatis 怎么优化?
MyBatis Plus 有哪些增强
hiberate 和 mybatis 的区别
# mybatis 连接池
tag:
count:1
as:mybatis 连接池,用过什么数据源,了解他们之间性能的差距吗?
# Mybatis 的执行流程
读取 mybatis-config.xml 文件,里面就是数据库的配置和 mapper 的地址。
创建 SqlSessionFactory。
通过 SqlSessionFactory 创建对应的 SqlSession,就是项目和数据库的会话,SqlSession 包含执行 sql 语句的所有方法。
执行操作数据库的接口,Executor 执行器,同时负责缓存的维护。
在 Executor 执行器中的 MapperStatement 对象,当操作数据库的时候会将 Java 的类型转为数据库的类型,当输出结果的时候会将数据库的类型转为 Java 的类型。

# Mybatis 延迟加载
延迟加载就是当需要使用数据的时候才去加载数据,不用数据得时候不会主动加载。
Mybatis 支持一对一关联对象和一对多关联集合的延迟加载。
在 mybatis 的配置文配置文件中的
LazyloadEnabled设置为 true 就开启了全局延迟加载。
底层
通过 GCLIB 的代理实现的。
当调用目标函数的时候,会调用拦截器的 invoke 方法,如果发现目标方法中的值为 null,则进行 sql 查询,在获取数据后通过 set 设置属性值,在后续调用目标方法时就有值了。