博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis面试常见题
阅读量:4984 次
发布时间:2019-06-12

本文共 925 字,大约阅读时间需要 3 分钟。

1、#{}和${}的区别是什么?(这个真的问过N遍了)

#{}会产生预编译,可以安全的设置参数(?),可以防止sql注入,

${} 则是直接插入,会产生sql注入,如果在sql末尾order by 中使用也无妨。

2、Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?

<sql>、<include> <if>........

3、通常一个.xml文件,都会写一个dao接口与之对应,请问这个dao接口的工作原理;

这个dao接口就是常说的MAPPER接口,接口的aa.bb,中的aa(全限名?)就是映射文件中的namespace

的值,bb(方法名)就是映射文件中的 MappedStatement的id值,接口内的参数就是传递给sql的参数,

当调用接口的时候,接口全限名+方法名 拼接字符串作为key值,可唯一定位一个MappedStatement,

工作原理是jdk动态代理的,mybatis运行时会使用jdk动态代理为dao接口生成代理proxy对象,

代理对象会拦截接口方法,执行MappedStatement所代表的sql,然后将sql执行结果返回。

4、Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不?

mybatis动态sql可以让我们在xml映射文件内,以标签的形式编写sql,Mybatis提供了9种动态sql标签trim|where|set|foreach|if|choose|when|otherwise|bind

执行原理;使用ognl从sql参数对象中计算表达式的值根据表达式的值动态拼接sql以此来完成动态sql的功能

5、mybatis是否支持延迟加载,如果支持,实现原理?

仅支持association 关联对象和collection关联集合对象的延迟加载,association指的是一对一,比如调用

a.getB().getName(),拦截器invoke()发现。a.getB()竟然是null

转载于:https://www.cnblogs.com/aGirlprogrammer/p/7226543.html

你可能感兴趣的文章
清北学堂2018DP&图论精讲班 DP部分学习笔记
查看>>
css3 2D变换 transform
查看>>
Fastjson获取天气信息封装bean
查看>>
不同编码字符所占大小
查看>>
使用迭代器优化代码
查看>>
JavaScript 获取随机数
查看>>
线程学习的几个实例
查看>>
dom4j读取XML文件内容
查看>>
Java虚拟机10:Client模式和Server模式的区别
查看>>
Blog搬家吧
查看>>
2017-2018-1 20155306 20155315《信息安全系统设计基础》实验二 固件程序设计
查看>>
自定义连接池
查看>>
MySQL 索引
查看>>
应用程序不能全然结束的原因探秘及调试方法
查看>>
单元文件结构
查看>>
DOM、SAX、DOM4J、JDOM、StAX生成XML并返回XML字符串形式
查看>>
60. Permutation Sequence
查看>>
254. Factor Combinations
查看>>
log日志 和回滚日志
查看>>
Hibernate【性能部分】
查看>>