纵有疾风起
人生不言弃

MyBatis 3.2.8 用户手册 4.1.5 Result Maps

明明如月 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, hashedPassword
from some_table
where id = #{id}
</select>
 

这个语句将所有列自根据指定的 
resultType
(结果类型) 自动映射到
HashMap

key
(键)中。虽然在多数场合非常有用,但是
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, hashedPassword
from some_table
where 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, hashedPassword
from some_table
where id = #{id}
</select>

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

<select id="selectUsers" resultType="User">
select
user_id as "id",
user_name as "userName",
hashed_password as "hashedPassword"
from some_table
where 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_password
from some_table
where id = #{id}
</select>

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

原文链接:https://blog.csdn.net/w605283073/article/details/45317031

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

未经允许不得转载:起风网 » MyBatis 3.2.8 用户手册 4.1.5 Result Maps
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录