MyBatis에서 resultType과 resultMap의 차이점에 대한 소개

MyBatis에서 select 맵을 조회할 때 반환 형식은resultType을 사용할 수도 있고resultMap을 사용할 수도 있습니다.resultType은 반환 형식(우리 모델 대상의 실체에 대응하는 것)을 직접 표시하고,resultMap은 외부 ResultMap에 대한 인용(db와 모델 사이의 은사 키 -->value 관계를 미리 정의합니다),resultType과resultMap은 동시에 존재할 수 없습니다.
MyBatis가 조회 맵을 할 때 사실 조회된 모든 속성은 대응하는 맵에 놓여 있는데 그 중에서 키는 속성 이름이고 값은 대응하는 값이다.
① 반환 형식 속성이resultType일 때 MyBatis는 맵의 키 값을 resultType에서 지정한 대상에 대응하는 속성으로 추출합니다.그래서 사실 MyBatis의 모든 조회에 비치는 반환 형식은 ResultMap입니다. 단지 제공된 반환 형식 속성이resultType일 때 MyBatis는 자동으로 대응하는 값을resultType에 지정한 대상의 속성에 부여합니다.
② 제공된 반환 유형이resultMap일 때 맵이 영역 모델을 잘 나타내지 못하기 때문에 스스로 대응하는 대상으로 전환해야 한다. 이것은 복잡한 조회에서 매우 작용한다.
다음은 두 가지 사용 차이에 대한 예입니다.

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()+"]"; 
} 
} 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration> 
<typeAliases> 
<!-- give a alias for model --> 
<typeAlias alias="goods" type="com.clark.model.Goods"></typeAlias> 
</typeAliases> 
<environments default="development"> 
<environment id="development"> 
<transactionManager type="JDBC" /> 
<dataSource type="POOLED"> 
<property name="driver" value="oracle.jdbc.driver.OracleDriver" /> 
<property name="url" value="jdbc:oracle:thin:@172.30.0.125:1521:oradb01" /> 
<property name="username" value="settlement" /> 
<property name="password" value="settlement" /> 
</dataSource> 
</environment> 
</environments> 
<mappers> 
<mapper resource="com/clark/model/goodsMapper.xml" /> 
</mappers> 
</configuration></span> 

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
<mapper namespace="clark"> 
<resultMap type="com.clark.model.Goods" id="t_good"> 
<id column="id" property="id"/> 
<result column="cate_id" property="cateId"/> 
<result column="name" property="name"/> 
<result column="price" property="price"/> 
<result column="description" property="description"/> 
<result column="order_no" property="orderNo"/> 
<result column="update_time" property="updateTime"/> 
</resultMap> 
<!--resultMap   resultType --> 
<select id="selectGoodById" parameterType="int" resultType="goods"> 
select id,cate_id,name,price,description,order_no,update_time 
from goods where id = #{id} 
</select> 
<select id="selectAllGoods" resultMap="t_good"> 
select id,cate_id,name,price,description,order_no,update_time from goods 
</select> 
<insert id="insertGood" parameterType="goods"> 
insert into goods(id,cate_id,name,price,description,order_no,update_time) 
values(#{id},#{cateId},#{name},#{price},#{description},#{orderNo},#{updateTime}) 
</insert> 
</mapper> 

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();</span> 

<span style="font-size:18px;"><span style="white-space:pre"> </span>// resultType  
Goods goods = (Goods)session.selectOne("clark.selectGoodById", 4); 
System.out.println(goods.toString());</span> 
[html] view plain copy  CODE 
<span style="font-size:18px;"><span style="white-space:pre"> </span>// resultMap  
List<Goods> 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(); 
} 
} 
} 
결과 출력:

<span style="color:#cc0000;">[goods include:Id=4,name=clark,orderNo=null,cateId=null,updateTime=null]--- resultType </span> 
<span style="color:#33ff33;">------- resultMap -----------------</span>
위에서 말한 것은 편집자가 여러분께 소개한 My Batis에서result Type과result Map의 차이점에 대한 소개입니다. 여러분께 도움이 되었으면 합니다. 궁금한 점이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 답장을 드리겠습니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기