resultMap元素是MyBatis中最重要最强大的元素,它可以让我们从90%的JDBCResultSets数据提取代码中解放出来,并在一些条件下允许我们做一些JDBC所不支持的事情。
ResultMap的设计思想是:简单的语句不需要明确的结果映射,而复杂一点的语句只需要描述他们的关系就行了。
一个简单的映射语句如下,它没有明确resultMap,知识简单的将所有的列映射到HashMap的键上,这由resultType指定:
<select id="selectUsers" resultType="map"> select id, username, hashedPassword from some_table where id = #{id}</select>虽然如此在大部分情况下都够用了,但是HashMap不是一个很好的模型,开发人员可能更加倾向于使用JavaBean或者POJO作为模型。MyBatis对两者都支持。
我们假定现在已经拥有一个名叫User的JavaBean,它定义了id、username以及hashedPassword属性。
这样的一个JavaBean可以被映射到ResultSet,就像映射到HashMap中一样简单:
<select id="selectUsers" resultType="com.someapp.model.User"> select id, username, hashedPassword from some_table where id = #{id}</select>如果列名和属性名并不能完全吻合的话,我们也可以使用自行定义的外部ResultMap:
<resultMap id="userResultMap" type="User"> <id property="id" column="user_id" /> <result property="username" column="user_name"/> <result property="password" column="hashed_password"/></resultMap>之后只要在需要使用它的元素中对它进行引用就好了:
<select id="selectUsers" resultMap="userResultMap"> select user_id, user_name, hashed_password from some_table where id = #{id}</select>