Mybatis
1. 什么是MyBatis?
Mybatis是的持久层框架,它对JDBC操作数据库的过程进行封装,使开发者只需要关注sql本身
2、#{}
和${}
的区别是什么?应用场景?
#{}
: 根据参数的类型进行处理,#{} 传参在进行SQL预编译时,防止 SQL注入。
${}
: 将参数取出不做任何处理,直接放入语句中。
mybatis 中优先使用 #{};当需要动态传入 表名或列名时,再考虑使用 ${} 。
3. 在mapper中如何传递多个参数,都有哪几种
#{param1}
- @Param("pageIndex") Integer pageIndex
- JavaBean
- Map
4. 说出MyBatis动态标签(至少5个)
- if
- choose
- where
- forEach
- trim
5. parameterType和resultType的区别
- resultType:主要针对于从数据库中提取相应的数据出来。
- parameterType:主要针对于将信息存入到数据库中,如:insert 增加数据到数据库,update更新数据等
6. 在用MyBatis插入时,如何得到数据库自增的主键值?
- useGeneratedKeys:使用主键回填,默认false
- last_insert_id:最后一条记录的id值
7. MyBatis批量删除/添加时,代码实现
在 Mapper 接口中传入 list 集合,在 mapper.xml 的 <delete>/<insert>
标签中使用
<foreach>
遍历 list 集合,循环多次删除数据,其实就是在delete / insert
标签中加上foreach 标签
8.MyBatis动态SQL执行流程和原理
- 读取MyBatis的配置文件
- 加载SQL映射文件
- 构造SqlSessionFactory会话工厂
- 创建SqlSession会话对象
- Executor执行器
- 创建MappedStatement对象
- 输入参数映射
- 输出结果映射
原理:根据表达式的值 完成逻辑判断并动态拼接 sql 的功能。
9. JDBC和Mybatis性能效率哪个块?为什么
JDBC快,因为 mybatis 需要去映射,而映射是在内存完成的,所以效率比 jdbc 慢。
10. MyBatis框架中用到了哪些设计模式?(3个)
- 单例模式:例如 ErrorContext 和 LogFactory。 - 工厂模式:例如 SqlSessionFactory、ObjectFactory。 - 代理模式:Mybatis 实现的核心,例如 MapperProxy、ConnectionLogger。 - Builder 模式 :例如 SqlSessionFactoryBuilder、XMLConfigBuilder。
11. MyBatis 一级缓存和二级缓存的区别?
- 一级缓存:每一个SqlSession对象单独分配内存,多个SqlSession内存不共享,该缓存无需手动开启,直接使用
- 二级缓存:mybatis默认不开启,需要手动开启,它是mapper级别的缓存;同一个namespace下的所有操作语句,都影响着同一个Cache,即 二级缓存被多个SqlSession共享,是一个全局的变量。
本文作者:Ritchie里其
本文链接:https://www.cnblogs.com/wang-zeyu/p/16694244.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步