MyBatis面试精华:#{与}$区别、XML映射标签详解及Dao接口原理

需积分: 12 1 下载量 36 浏览量 更新于2024-09-01 收藏 18KB DOCX 举报
在MyBatis面试中,面试官可能会关注候选人的基础知识掌握情况,特别是在SQL查询语言的使用和XML映射文件的理解上。以下是一些关键知识点: 1. **#{}和${}的区别**: - `${}` 是Java Properties文件中的变量占位符,用于在XML配置文件中引用外部属性值,例如`${driver}`会替换为`com.mysql.jdbc.Driver`。这是一种静态文本替换,适合简单的字符串值。 - `#{}` 在MyBatis中则是参数化占位符,用于动态SQL语句中。MyBatis会在执行时将`#{}`替换为`?`,并在执行PreparedStatement时设置相应的参数值。例如,`#{item.name}`会根据传入的对象自动获取`item`的`name`属性,如`param.getItem().getName()`。 2. **XML映射文件中的其他标签**: - `<resultMap>`:定义结果集映射,用于映射数据库查询结果到Java对象的属性。 - `<parameterMap>`:定义参数映射,用于一次性传递多个参数到SQL语句。 - `<sql>`:包含静态SQL片段,可以独立于具体的Mapper接口使用。 - `<include>`:引入其他XML片段,实现代码复用。 - `<selectKey>`:处理自增ID或者事务控制相关操作。 - 动态SQL标签(trim、where、set、foreach、if、choose、when、otherwise、bind):允许在运行时根据条件或参数动态构建SQL。 3. **Dao接口的工作原理及重载问题**: - Dao接口(Mapper接口)是MyBatis的核心,它与XML映射文件一一对应。接口方法的名称对应映射文件中的`MappedStatement` ID,而接口全限定名(例如`com.mybatis3.mappers.StudentDao`)关联了XML文件的命名空间(namespace)。 - Dao接口方法不支持常规的Java方法重载,因为每个方法调用实际上是通过`MappedStatement`来定位具体的SQL查询。参数的不同并不意味着方法的重载,而是通过不同的参数映射来处理不同的SQL上下文。 在实际开发中,遵循的最佳实践是将SQL逻辑封装在Mapper接口中,确保代码清晰、易于维护。同时,通过使用这些内置的标签,可以实现更加灵活和高效的数据库访问。对于参数化查询的使用,不仅可以提高安全性(防止SQL注入),还能提升性能(减少字符串拼接开销)。