【Mybatis】面试题汇总

Mybatis

1. Mybatis执行流程

答:

  1. 首先加载Mybatis的配置文件,读取Mybatis的配置信息。
  2. 构造SqlSessionFactory会话工厂,通过SqlSessionFactoryBuilder根据配置信息生成SqlSessionFactory实例。
  3. 会话工厂创建SqlSession
  4. SqlSession获取Mapper接口的代理对象,然后根据Mapper接口中的方法名找到对应的SQL,执行SQL语句。
  5. 根据resultMap将查询结果映射为Java对象。
  6. 使用完毕关闭SqlSession

2. 一级缓存、二级缓存

答:

  1. 一级缓存: 作用域是SqlSession级别(与数据库的一次会话),也就是在同一个SqlSession下可以走缓存。基于HashMap的本地索引, 默认是打开的,无法关闭。
  2. 二级缓存: 作用域namespace级别的,查询同一个mapper中的方法会走缓存,默认是关闭的

二级缓存的缺点:

  • 数据一致性问题: 二级缓存是可以被多个SqlSession共享的,所以就有可能出现并发安全问题。
  • 资源消耗问题: 二级缓存会缓存一个mapper中记录,可能会消耗更多的内存资源。

3. Mybatis中${}和#{}有什么区别

答:

  • ${}:Mybatis会直接将 ${} 中的内容拼接在SQL语句中,容易引发SQL注入问题。
  • #{}:Mybatis会创建预处理(PreparedStatement)语句,将 SQL 中的 #{} 替换为 ? 号,然后会调用PreparedStatementset 方法来赋值。能够预防SQL注入问题。

预处理语句(PreparedStatement)的优势:

  1. 性能更好:相比于statement,预处理语句只会编译一次,然后多次使用。减少SQL语句的编译次数,提高数据库的执行效率。
  2. 防止SQL注入:PreparedStatement可以使用参数占位符?,并且会对参数进行合适的转换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值