mybatais面试题(复习篇)

一.#{}和${}的区别是什么?

${}是properties文件的变量占位符,他可以用于标签属性值,和sql内部,属于静态文本代替.

#{}是sql的参数占位符mybatis会将#{}替换为?,在SQL执行前会使用preparedStatement的参数设置方法,

按序给?占位符设置参数值

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

还有其他很多标签,如:<resultMap><SelectKey><ParameterMap><sql><include>,在加上9个动态标签<where><if>

<trim><set><foreach><choose><when><otherwise><bind>等

三.最佳实践中,通常一个Xml映射文件,都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗

dao接口的工作原理是jdk动态代理,mybatis运行时会使用jdk动态代理为dao接口生成代理对象proxy对象,代理对象proxy会拦截接口方法,转而执行MapperStatement所代表的sql,然后将SQL执行结果返回

dao接口的方法是不支持重载的,因为是全限定名+加方法名的保存和寻找策略

原文地址:https://www.cnblogs.com/liuzhiw/p/8530933.html