iBatis(旧版MyBatis)的sql-map.xml怎么写

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,重点讲清结构、常用标签和注意事项:

根元素与命名空间

文件必须以 为根节点,并指定 namespace(推荐用 DAO 接口全限定名或业务模块名),方便在代码中引用:


br>   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

  ...

定义 SQL 语句(statement)

每个 SQL 封装在一个 标签里,必须有唯一 id(配合 namespace 构*局唯一标识):

  • id:Java 代码中通过 sqlMap.queryForObject("UserDao.getUserById", param) 调用
  • parameterClass:指定传入参数类型(如 java.lang.Longcom.example.model.User),可省略但建议写明
  • resultClassresultMap:指定返回类型;简单类型用 resultClass(如 java.lang.String),复杂对象建议用 resultMap

参数占位与动态 SQL

iBatis 使用 #xxx# 做预编译参数占位(防 SQL 注入),$xxx$ 做字符串拼接(慎用,易被注入):

  • #id# → 预编译参数,自动加引号(数值类型不加)
  • #user.name# → 从参数对象取属性(支持嵌套,如 user.profile.age
  • $tableName$ → 直接替换,适用于表名、排序字段等无法参数化的场景

动态 SQL 用 等标签(注意不是 MyBatis 3 的 ):

结果映射(resultMap)

当列名与 Java 属性名不一致,或需处理一对一、一对多关联时,用 显式定义映射关系:

  • id:resultMap 的唯一标识(配合 namespace 使用)
  • class:对应的目标 Java 类
  • :建立属性与字段映射
  • 关联用 (延迟加载)

  
  
  


基本上就这些。注意:iBatis 2.x 已停止维护,新项目请直接用 MyBatis 3+(使用 Mapper.xml + 注解方式,语法更简洁、功能更强)。但维护老系统时,按上述规则写 sql-map.xml 是稳妥可行的。