映射查询语句 select

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
  SELECT 
  	ID, `NAME`, CODE
  FROM country
  WHERE ID = #{id, jdbcType=INTEGER}
</select>

属性说明:

  1. id:命名空间中的唯一标识符,可用来代表这条语句。

    XML 中的 select 标签的 id 属性值必须与对应的接口方法名相同。MyBatis 就是通过这种方式将接口方法和 XML 中定义的 SQL 语句关联到一起的,如果接口方法没有和 XML 中的 id 属性值相对应,启动程序便会报错。

    映射 XML 和接口的命名需要符合如下规则:

    1. 当只使用 XML 而不使用接口的时候,namespace 的值可以设置为任意不重复的名称。

    2. 标签的 id 属性值在任何时候都不能出现英文句号 “.”,并且同一个命名空间下不能出现重复的 id

    3. 因为接口方法是可以重载的,所以接口中可以出现多个同名但参数不同的方法,但是 XML 中 id 的值不能重复,因而接口中的所有同名方法会对应着 XML 中的同一个 id 的方法。最常见的用法就是,同名方法中其中一个方法增加一个 RowBound 类型的参数用于实现分页查询。

  2. resultMap:用于设置返回值的类型和映射关系。在上面的 select 中,使用 resultMap 设置返回值的类型,这里的 BaseResultMap 就是结果映射 resultMap中 <resultMap> 中的 id 属性值,通过 id 引用需要的 <resultMap>

  3. select 标签中的查询语句为:

    SELECT 
      	ID, `NAME`, CODE
    FROM country
    WHERE ID = #{id, jdbcType=INTEGER}

    #{id}:MyBatis SQL 中使用预编译参数的一种方式,大括号中的 id 是传入的参数名。

在定义接口中方法的返回值时,必须注意查询 SQL 可能返回的结果数量:

  • 当返回值最多只有 1 个结果的时候(可以 0 个),可以将接口返回值定义为 Country,而不是 List。当然,如果将返回值改为 List 或 Country[],也没有问题,但不建议这么做。

  • 当执行的 SQL 返回多个结果时,必须使用 List 或 Country[] 作为返回值,如果使用 Country,就会抛出 TooManyResultsException 异常。

Last updated