Java开发框架之Mybatis(三)与mybatis相关面试问题

1.#{} 和${}的区别

#{} 只是替换?,相当于PreparedStatement使用占位符去替换参数,可以防止sql注入。
是 进 行 字 符 串 拼 接 , 相 当 于 s q l 语 句 中 的 S t a t e m e n t , 使 用 字 符 串 去 拼 接 s q l ; {} 是进行字符串拼接,相当于sql语句中的Statement,使用字符串去拼接sql; sqlStatement使sql可以是sql中的任一部分传入到Statement中,不能防止sql注入。

使用 去 取 出 参 数 值 信 息 , 需 要 使 用 {} 去取出参数值信息,需要使用 使{value}
#{} 只是表示占位,与参数的名字无关,如果只有一个参数,会自动对应。

2.SqlSession、sqlSessionFactory、sqlSessionFactoryBuilder三者的生命周期及区别

(1)sqlSessionFactoryBuilder:
一旦将SqlSessionFctory创建出来后,其生命周期就结束。
(2)sqlSessionFactory:
一旦被创建,会在你的应用执行期间都会存在。要保证在全局范围内sqlSessionFactory只有一个,为了保证这一点要用单例模式或静态单例模式去创建它。
(3)SqlSession:
每个线程都应该有它自己的 SqlSession 。每调用一个方法就得重新创建一个SqlSession。
它不能被共享,也是线程不安全的。

3.Mybatis的缓存

一级缓存:
基于SqlSession, 在一个SqlSession生命周期范围内, 连续查询相同的sql,会只发送一次语句。
原理:
a : 查询时 先看缓存中 是否有该对象 如果有直接返回,没有,则查询数据库 并且写入到缓存中
b : 两次之间 如果有 添加 删除 修改 动作并提交事务 一级缓存自动清空
二级缓存:
基于SqlSessionFactory
为什么用?
一个项目中肯定会存在很多共用的查询数据,对于这一部分的数据,没必要
每一个用户访问时都去查询数据库,因此配置二级缓存将是非常必要的。

4.mybatis多个参数,该怎么处理

(1)@Param注解传参法
public List selectStudent3(@Param(“name”) String name, @Param(“a”) int index);
(2)普通java类
public List selectStudent4(Student student);
(3)Map传参法
public List selectStudent5(Map map);

5.mybatis映射的接口里能不能写重载方法

mybatis映射的接口里 方法名称不能相同,也不能重载
因为会导致 mapper文件id冲突

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值