sql-map.xml 是 iBatis 2.x 的核心 SQL 映射配置文件,以 为根节点并设 namespace;含 等 statement 标签,用 #xxx# 防注入、$xxx$ 拼接;支持 等动态标签及 显式映射。

sql-map.xml 是 iBatis(MyBatis 早期版本,即 2.x 系列)中用于定义 SQL 映射的核心配置文件。它把 Java 对象和数据库操作解耦,通过 XML 声明 SQL、参数映射、结果映射等。
下面直接说明怎么写一个可用的 sql-map.xml,重点讲清结构、常用标签和注意事项:
根元素与命名空间
文件必须以
br> "http://ibatis.apache.org/dtd/sql-map-2.dtd">
...
定义 SQL 语句(statement)
每个 SQL 封装在一个 、
-
id:Java 代码中通过
sqlMap.queryForObject("UserDao.getUserById", param)调用 -
parameterClass:指定传入参数类型(如
java.lang.Long、com.example.model.User),可省略但建议写明 -
resultClass 或 resultMap:指定返回类型;简单类型用
resultClass(如java.lang.String),复杂对象建议用resultMap
参数占位与动态 SQL
iBatis 使用 #xxx# 做预编译参数占位(防 SQL 注入),$xxx$ 做字符串拼接(慎用,易被注入):
-
#id#→ 预编译参数,自动加引号(数值类型不加) -
#user.name#→ 从参数对象取属性(支持嵌套,如user.profile.age) -
$tableName$→ 直接替换,适用于表名、排序字段等无法参数化的场景
动态 SQL 用 ):
结果映射(resultMap)
当列名与 Java 属性名不一致,或需处理一对一、一对多关联时,用
-
id:resultMap 的唯一标识(配合 namespace 使用) -
class:对应的目标 Java 类 -
:建立属性与字段映射 - 关联用
(延迟加载)
基本上就这些。注意:iBatis 2.x 已停止维护,新项目请直接用 MyBatis 3+(使用 Mapper.xml + 注解方式,语法更简洁、功能更强)。但维护老系统时,按上述规则写 sql-map.xml 是稳妥可行的。










