MyBatis中关于resultType和resultMap的区别介绍

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的(对应着我们的model对象中的实体),而resultMap则是对外部ResultMap的引用(提前定义了db和model之间的隐射key-->value关系),但是resultType跟resultMap不能同时存在。

在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。

①当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。

②当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。

下面给出一个例子说明两者的使用差别:

package com.clark.model; 
import java.util.Date; 
public class Goods { 
private Integer id; 
private Integer cateId; 
private String name; 
private double price; 
private String description; 
private Integer orderNo; 
private Date updateTime; 
public Goods(){ 
} 
public Goods(Integer id, Integer cateId, String name, double price, 
String description, Integer orderNo, Date updateTime) { 
super(); 
this.id = id; 
this.cateId = cateId; 
this.name = name; 
this.price = price; 
this.description = description; 
this.orderNo = orderNo; 
this.updateTime = updateTime; 
} 
public Integer getId() { 
return id; 
} 
public void setId(Integer id) { 
this.id = id; 
} 
public Integer getCateId() { 
return cateId; 
} 
public void setCateId(Integer cateId) { 
this.cateId = cateId; 
} 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public double getPrice() { 
return price; 
} 
public void setPrice(double price) { 
this.price = price; 
} 
public String getDescription() { 
return description; 
} 
public void setDescription(String description) { 
this.description = description; 
} 
public Integer getOrderNo() { 
return orderNo; 
} 
public void setOrderNo(Integer orderNo) { 
this.orderNo = orderNo; 
} 
public Date getTimeStamp() { 
return updateTime; 
} 
public void setTimeStamp(Date updateTime) { 
this.updateTime = updateTime; 
} 
@Override 
public String toString() { 
return "[goods include:Id="+this.getId()+",name="+this.getName()+ 
",orderNo="+this.getOrderNo()+",cateId="+this.getCateId()+ 
",updateTime="+this.getTimeStamp()+"]"; 
} 
} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
insert into goods(id,cate_id,name,price,description,order_no,update_time) 
values(#{id},#{cateId},#{name},#{price},#{description},#{orderNo},#{updateTime}) 
 
 
package com.clark.mybatis; 
import java.io.IOException; 
import java.io.Reader; 
import java.util.List; 
import org.apache.ibatis.io.Resources; 
import org.apache.ibatis.session.SqlSession; 
import org.apache.ibatis.session.SqlSessionFactory; 
import org.apache.ibatis.session.SqlSessionFactoryBuilder; 
import com.clark.model.Goods; 
public class TestGoods { 
public static void main(String[] args) { 
String resource = "configuration.xml"; 
try { 
Reader reader = Resources.getResourceAsReader(resource); 
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); 
SqlSession session = sessionFactory.openSession(); 
 //使用resultType的情况 
Goods goods = (Goods)session.selectOne("clark.selectGoodById", 4); 
System.out.println(goods.toString()); 
[html] view plain copy 在CODE上查看代码片派生到我的代码片
 //使用resultMap的情况 
List gs = session.selectList("clark.selectAllGoods"); 
for (Goods goods2 : gs) { 
System.out.println(goods2.toString()); 
} 
// Goods goods = new Goods(4, 12, "clark", 12.30, "test is ok", 5, new Date()); 
// session.insert("clark.insertGood", goods); 
// session.commit(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
} 
} 

结果输出为:

[goods include:Id=4,name=clark,orderNo=null,cateId=null,updateTime=null]---使用resultType的结果 
-------使用resultMap的结果-----------------

 以上所述是小编给大家介绍的MyBatis中关于resultType和resultMap的区别介绍,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

你可能感兴趣的:(MyBatis中关于resultType和resultMap的区别介绍)