myBatis3之SQL映射的XML文件(resultMap元素之一)

myBatis3之SQL映射的XML文件(resultMap元素之一)

----------

 

你已经看到简单映射语句的示例了,但没有明确的resultMap。比如: 

<select id=”selectUsers” parameterType=”int” resultType=”hashmap”> 
	select id, username, hashedPassword 
	from some_table 
	where id = #{id} 
</select> 

这样一个语句简单作用于所有列被自动映射到HashMap的键上,这由resultType属性指定。这在很多情况下是有用的,但是HashMap不能很好描述一个领域模型。那样你的应用程序将会使用JavaBeans或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。这些在select语句中会精确匹配到列名。这样的一个JavaBean可以被映射到结果集,就像映射到HashMap一样简单。 

<select id=”selectUsers” parameterType=”int” resultType=”com.someapp.model.User”> 
	select id, username, hashedPassword 
	from some_table 
	where id = #{id} 
</select> 

要记住类型别名是你的伙伴。使用它们你可以不用输入类的全路径。比如:

<!-- In Config XML file --> 
<typeAlias type=”com.someapp.model.User” alias=”User”/> 
<!-- In SQL Mapping XML file --> 
<select id=”selectUsers” parameterType=”int” resultType=”User”> 
	select id, username, hashedPassword 
	from some_table 
	where id = #{id} 
</select> 

这些情况下,MyBatis会在幕后自动创建一个ResultMap基于属性名来映射列到JavaBean的属性上。如果列名没有精确匹配,你可以在列名上使用select字句的别名(一个基本的SQL特性)来匹配标签。比如:  

<select id=”selectUsers” parameterType=”int” resultType=”User”> 
	select 
		user_id as “id”, 
		user_name as “userName”, 
		hashed_password as “hashedPassword”  
	from some_table 
	where id = #{id} 
</select> 

ResultMap最优秀的地方你已经了解了很多了,但是你还没有真正的看到一个。只是出于示例的原因,让我们来看看最后一个示例中外部的 resultMap是什么样子的,这也是解决列名不匹配的另外一种方式。 

<resultMap id="userResultMap" type="User"> 
	<id property="id" column="user_id" /> 
	<result property="username" column="username"/> 
	<result property="password" column="password"/> 
</resultMap> 

 引用它的语句使用resultMap属性就行了(注意我们去掉了resultType属性)。比如:

<select id=”selectUsers” parameterType=”int” resultMap=”userResultMap”> 
	select user_id, user_name, hashed_password 
	from some_table 
	where id = #{id} 
</select> 
 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值