1 Mybatis 常见面试题(转) 1、#{}和${}的区别是什么
注:这道题是面试官面试我同事的
答:${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为 com
Driver
#{}是 sql 的参数占位符,Mybatis 会将 sql 中的#{}替换为
号,在 sql 执行前会使用 PreparedStatement 的参数设置方法,按序给 sql 的
号占位符设置参数值,比如 ps
setInt(0, parameterValue),#{item
name}的取值方式为使用反射从参数对象中获取 item 对象的 name 属性值,相当于param
getItem()
getName()
2、Xml 映射文件中,除了常见的 select|insert|updae|delete 标签之外,还有哪些标签
注:这道题是京东面试官面试我时问的
答:还有很多其他的标签,、、、、,加上动态 sql 的 9 个标签,trim|where|set|foreach|if|choose|when|otherwise|bind 等,其中为sql 片段标签,通过标签引入 sql 片段,为不支持自增的主键生成策略标签
3、最佳实践中,通常一个 Xml 映射文件,都会写一个 Dao 接口与之对应,请问,这个 Dao 接口的工作原理是什么
Dao 接口里的方法,参数不同时,方法能重载吗
注:这道题也是京东面试官面试我时问的
答:Dao 接口,就是人们常说的 Mapper 接口,接口的全限名,就是映射文件中的 namespace 的值,接口的方法名,就是映射文件中 MappedStatement的 id 值,接口方法内的参数,就是传递给sql 的参数
Mapper 接口