博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyBatis有关resultType和resultMap差异
阅读量:6708 次
发布时间:2019-06-25

本文共 4495 字,大约阅读时间需要 14 分钟。

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());
			//使用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的结果-----------------
[goods include:Id=4,name=clark,orderNo=5,cateId=12,updateTime=Wed Sep 17 15:29:58 CST 2014][goods include:Id=1,name=诺基亚N85,orderNo=1,cateId=1,updateTime=Wed Sep 17 13:52:51 CST 2014]
[goods include:Id=2,name=金立 A30,orderNo=2,cateId=1,updateTime=Wed Sep 17 13:53:11 CST 2014][goods include:Id=3,name=金立 A30,orderNo=3,cateId=2,updateTime=Wed Sep 17 15:07:38 CST 2014]
 

版权声明:本文博客原创文章。博客,未经同意,不得转载。

你可能感兴趣的文章
手机网站判断及跳转
查看>>
[LeetCode] Text Justification
查看>>
webdriver API study
查看>>
QoS令牌桶工作原理
查看>>
android工程gen目录中R.java包名是怎么确定
查看>>
【Machine Learning in Action --4】朴素贝叶斯过滤网站的恶意留言
查看>>
Java基础之类Class使用
查看>>
Ubuntu+Eclipse+ADT+Genymotion+VirtualBox开发环境搭建
查看>>
Android 学习之 开源项目PullToRefresh的使用
查看>>
Matplot中文乱码完美解决方式
查看>>
stm32学习笔记----双串口同时打开时的printf()问题
查看>>
Java代码简化神器-Lombok
查看>>
How do I create a List in Scala?
查看>>
lintcode:移动零
查看>>
tomcat的webappclassloader中一个奇怪的异常信息
查看>>
Java语言与C++语言的差异总结
查看>>
Semaphore实现Andoird版源代码剖析
查看>>
使用gSoap规避和改动ONVIF标准类型结构的解析
查看>>
架构设计之策略模式
查看>>
hdu 5400 Arithmetic Sequence(模拟)
查看>>