mybatis

mybatis 运行原理

https://zhuanlan.zhihu.com/p/97879019

#{}和${} 的区别

1. #{} 是预编译处理,${} 是字符串替换。
2. MyBatis在处理 #{} 时,会将SQL中的 #{} 替换为 ? 号,之后使用 PreparedStatement 的 set 方法来赋值;MyBatis在处理 ${} 时,就是把 ${} 替换成变量的值。
3. 使用 #{} 可以有效的防止 SQL 注入,提高系统安全性。

核心概念

SqlSessionFactory: MyBatis 的核心工厂,负责创建SqlSession,由配置文件初始化生成,全局唯一。
SqlSession:数据库会话对象,负责执行具体的SQL 操作(增删改查),线程不安全,用完需关闭。
Mapper:数据访问接口,定义数据库操作方法,SQL 语句通过XML 或注解编写,与接口绑定。

一级缓存和二级缓存: 一级缓存:SqlSession 级缓存,默认开启。同一SqlSession 内查询相同数据,只执行一次SQL。 二级缓存:Mapper 级缓存,需手动开启(在XML 中添加 ),不同 SqlSession 可共享缓存。