resultMap 与sql

定义

resultMap 标签用于将数据库数据映射为 Java 对象;sql 标签则用来定义可重用的 SQL 代码段。

resultMap 实例

在下面这段 select 标签中,SQL 语句返回的是一个复杂对象,即 resultType 上指定的 User。

<select id="selectUserByAgeAndScore" parameterType="com.imooc.mybatis.model.User"
        resultType="com.imooc.mybatis.model.User">
  SELECT * FROM imooc_user WHERE age = #{age} AND score = #{score}
</select>

在这种情况下,MyBatis 会自动创建 resultMap 对象进行数据的映射,接下来我们直接定义出 resultMap,避免 MyBatis 推断和映射带来的性能损耗。如下:

<resultMap id="userMap" type="com.imooc.mybatis.model.User">
  <id property="id" column="id"/>
  <result property="username" column="username"/>
  <result property="age" column="age"/>
  <result property="score" column="score"/>
</resultMap>

<select id="selectUserByAgeAndScore" parameterType="com.imooc.mybatis.model.User"
        resultMap="userMap">
  SELECT * FROM imooc_user WHERE age = #{age} AND score = #{score}
</select

我们定义了名为 userMap 的 resultMap 且指定其对应的 Java 类型为 User,在标签的内部,我们还需指定字段之间的映射,除 id 这个特殊的字段外,其它字段均使用 result 标签来映射。

其中 property 是 Java 对象中的字段名称,column 是数据表与之对应的字段名称。

resultMap 定义完毕后,我们在 select 标签中通过 resultMap 属性来设置对应的 id。

TIPS: 注意, resultMap 和 resultType 不能共存,只能二选一。

这样,一次简单的 resultMap 使用就完毕了。

SQL实例

SELECT * FROM imooc_user这样的代码段其实非常常见,会在多个 select 标签中用到它。我们可以将其定义为一个 sql 标签,这样所有的 select 标签都可以快速复用到这段代码。

<sql id="selectUser"> SELECT * FROM imooc_user </sql>

同样的,我们必须为这个代码段定义一个唯一的 id,定义好后,我们就可以在其它标签中使用了:

<select id="selectUserByAgeAndScore" parameterType="com.imooc.mybatis.model.User"
        resultMap="userMap">
  <include refid="selectUser"/>
  WHERE age = #{age} AND score = #{score}
</select>

这里,我们必须使用一个 include 标签来将 SQL 标签包含进来,并且 refid 属性必须是该 SQL 标签的 id 值。这样这段代码仍然可以正常工作。

posted @ 2020-08-01 00:10  柒丶月  阅读(444)  评论(0编辑  收藏  举报