MyBatis 3.2.8 用户手册 4.1.5 Result Maps

来源:互联网 发布:中国网络资讯台 山寨 编辑:程序博客网 时间:2024/06/04 22:54


明明如月 QQ  605283073


本科英语翻译专业  研究生  软件工程专业  爱好JAVA 学习2年+


 纯粹爱好,利用业余时间翻译。首次尝试翻译  有不足请见谅。


4.1.5 Result Maps 

结果映射(ResultMap) 是 MyBatis框架中最重要和强大的元素. 

它为你节省从JDBC结果集中获取数据90%的代码,在某些情况下甚至提供给JDBC都不支持的功能。

实际上,写一些比如含有join的复杂语句映射的等价代码甚至需要上千行代码。结果映射(ResultMaps)设计的简洁语句不需要明确的结果映射,甚至更复杂的语句仅需要必须的关系描述。

你已经见识过了没有明确结果映射(ResultMap)的简单映射的例子,如下:

 

<select id="selectUsers" resultType="map">select id, username, hashedPasswordfrom some_tablewhere id = #{id}</select> 

这个语句将所有列自根据指定的 resultType(结果类型) 自动映射到HashMapkey(键)中。虽然在多数场合非常有用,但是HashMap不能作很好的模型域。你的应用程序将更可能的用JavaBean或者POJOs作为模型域。MyBatis对这两种都支持。让我们看下下面的JavaBean:

package com.someapp.model;public class User {private int id;private String username;private String hashedPassword;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getHashedPassword() {return hashedPassword;}public void setHashedPassword(String hashedPassword) {this.hashedPassword = hashedPassword;}}

 

  基于JavaBean风格的上述类包含3个属性:id,username,hashedPassword。这3个属性名好选择语句中的类名完全相同。这种JavaBean可以像HashMap一样非常容易的映射到ResultSet(结果集)中。

 

<select id="selectUsers" resultType="com.someapp.model.User">select id, username, hashedPasswordfrom some_tablewhere id = #{id}</select>

记住TypeAliases(类型别名)是你的朋友。要学会使用类型别名以便你不用输入完整的类路径。例如:

<!-- In Config XML file --><typeAlias type="com.someapp.model.User" alias="User"/><!-- In SQL Mapping XML file --><select id="selectUsers" resultType="User">select id, username, hashedPasswordfrom some_tablewhere id = #{id}</select>

在这些情况下MyBatis在幕后自动创建结果集(ResultMap)根据名字自动映射列到JavaBean对应的属性中。如果列名并不完全匹配你可以用查询语句列的别名(标准的sql风格)来让标签匹配。例如:

<select id="selectUsers" resultType="User">selectuser_id as "id",user_name as "userName",hashed_password as "hashedPassword"from some_tablewhere id = #{id}</select>

ResultMaps的伟大之处在于,你学的很多,但是还没亲眼见识到他的效果

这些简单的例子就需要你所见的这么点配置。

为了演示起见,让我们看看如果用另外一种外部结果映射(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>

这个语句参考结果映射(ResultMap)属性来实现(请注意:我们移除了结果类型)。例如:

<select id="selectUsers" resultMap="userResultMap">select user_id, user_name, hashed_passwordfrom some_tablewhere id = #{id}</select>

 现在如果世界总是这么简单该多好。

1 0
原创粉丝点击