MyBatis 的 namespace是什么?

MyBatis 的 namespace 就是 SQL 映射文件对应的唯一标识。

主要用于做以下事情:

  • 区分映射语句。
  • 逐步构建加载语句。
  • 引用 SQL 片段。

每个 namespace 会对应一个 Java 的 Mapper 接口。

举个例子:
UserMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.itzhimei.mapper.UserMapper">

  <select id="selectUser" resultType="com.itzhimei.pojo.User">
    select * from user where id = #{id}  
  </select>

</mapper>

对应的接口:

public interface UserMapper {
  User selectUser(int id);  
}

这里的 namespace 为:”com.itzhimei.mapper.UserMapper”

它主要用在:

  1. 映射语句中引用参数:
#{namespace.parameter}
#{com.itzhimei.mapper.UserMapper.id}
  1. 引用结果集:
<resultMap type="namespace.type" />
<resultMap type="com.itzhimei.pojo.User" />
  1. 引用 SQL 片段:
<include refid="namespace.sql-fragment" />

所以,MyBatis 的 namespace 就相当于给 SQL 映射文件起一个唯一的名称,并通过它来引用参数、结果集和 SQL 片段。