mybatis学习之路----输出映射之resultType resultMap
2017-09-10 15:52
465 查看
点滴记载,点滴进步,愿自己更上一层楼。
注:项目是在 mybatis学习之路----insert主键返回 selectKey使用 的基础上进行的。
mybatis的映射文件中,在写select的时候会有输出映射结果集属性 resultType 或者resultMap两种,当然这两种也最常用。
首先说说 resultType
resultType 可以接收基本类型,包装类型的结果集映射。但是当是包装类型的时候就有要求了,必须包装类型中的属性值跟查询结果的字段对应的上,否则的话对应不上的属性是接收不到查询结果的。
例如:
数据库customer表字段为 id c_name c_sex c_ceroNo c_ceroType c_age这些。当想要通过主键来查询信息的时候,使用了一个model但是model
中的属性跟这些字段不完全对应,
例如,customer model的属性:id name age sex ceroNo ceroType,跟表中的统一导游c_的形式不一样。这样即使查询有结果,mybatis也没发
将数据绑定到model中。
下面进行演示:
customer.xml Customer.java
<!-- resultType 输出映射为 com.soft.mybatis.model.Customer,由于属性跟表数据对应不上,
导致部分数据绑定不到model中去 -->
<select id="findById" parameterType="string" resultType="com.soft.mybatis.model.Customer">
select * from t_customer where id=#{id}
</select>
Customer findById(String id);CustomerDaoImpl
CustomerDaoImplTest
@Test
public void findById() throws Exception {
Customer result = customerDao.findById("9e77c26b-95f7-11e7-b376-a45d36688239");
System.out.println("查询结果 : "+result);
}
数据库数据
如上面测试结果,resultType输出结果映射仅仅id属性映射成功了。其他的都为null。就是因为属性跟数据库字段对应不上。
怎么样才能让查询结果集映射到model中呢?这时候resultMap就出现了。
resultMap 需要首先在xml中定义一个 <resultMap></resultMap>节点
<!-- resultMap 数据结果集映射map,主要作用就是将数据库中的字段跟需要映射的model的属性一一对应,
这样即使model中的属性跟数据库中的字段不一样,也能映射成功
id 这个resultMap的唯一表示,
type 需要映射的model信息-->
<resultMap id="customerMap" type="com.soft.mybatis.model.Customer">
<!-- id 属性专门用来映射主键信息,其他信息用result节点
column 数据库字段
property model属性 -->
<id column="id" property="id"/>
<!-- result 用来映射非主键信息, column property 作用跟id标签的一样-->
<result column="c_name" property="name"/>
<result column="c_sex" property="sex"/>
<result column="c_age" property="age"/>
<result column="c_ceroNo" property="ceroNo"/>
<result column="c_ceroType" property="ceroType"/>
</resultMap>
然后查询节点对其进行引用即可,引用它的id属性名。注意下面的这段,已经将resultType换成了resultMap了。
<!-- 这次用resultmap接收输出结果 -->
<select id="findById2" parameterType="string" resultMap="customerMap">
select * from t_customer where id=#{id}
</select>
然后就是实现与测试,
CustomerDao
<
aa58
/span> Customer findById2(String id);CustomerDaoImpl
@Test
public void findById2() throws Exception {
Customer result = customerDao.findById2("9e77c26b-95f7-11e7-b376-a45d36688239");
System.out.println("查询结果 : "+result);
}结果:
可以看出,成功将结果即映射到了customer里面。
由上面可以看出来 resultType resultMap的区别:
resultMap 仅仅是作用数据库表字段跟model的属性的映射关系而存在,当需要映射的model的属性跟数据库字段不一样的时候使用,
但是如果数据库字段名跟需要映射的moadel的属性名完全一致,resultMap可以不用,resultType足够了。
但是,真正项目中的model的属性跟表字段完全对应的概率很小。
resultType可以映射结果集为基本类型的,resultmap就无能为力了。
注:项目是在 mybatis学习之路----insert主键返回 selectKey使用 的基础上进行的。
mybatis的映射文件中,在写select的时候会有输出映射结果集属性 resultType 或者resultMap两种,当然这两种也最常用。
首先说说 resultType
resultType 可以接收基本类型,包装类型的结果集映射。但是当是包装类型的时候就有要求了,必须包装类型中的属性值跟查询结果的字段对应的上,否则的话对应不上的属性是接收不到查询结果的。
例如:
数据库customer表字段为 id c_name c_sex c_ceroNo c_ceroType c_age这些。当想要通过主键来查询信息的时候,使用了一个model但是model
中的属性跟这些字段不完全对应,
例如,customer model的属性:id name age sex ceroNo ceroType,跟表中的统一导游c_的形式不一样。这样即使查询有结果,mybatis也没发
将数据绑定到model中。
下面进行演示:
customer.xml Customer.java
<!-- resultType 输出映射为 com.soft.mybatis.model.Customer,由于属性跟表数据对应不上,
导致部分数据绑定不到model中去 -->
<select id="findById" parameterType="string" resultType="com.soft.mybatis.model.Customer">
select * from t_customer where id=#{id}
</select>
package com.soft.mybatis.model; /** * Created by xuweiwei on 2017/9/10. */ public class Customer { private String id; private String name; private Integer age; private Integer sex; private String ceroNo; private Integer ceroType; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public String getCeroNo() { return ceroNo; } public void setCeroNo(String ceroNo) { this.ceroNo = ceroNo; } public Integer getCeroType() { return ceroType; } public void setCeroType(Integer ceroType) { this.ceroType = ceroType; } @Override public String toString() { return "Customer{" + "id='" + id + '\'' + ", name='" + name + '\'' + ", age=" + age + ", sex=" + sex + ", ceroNo='" + ceroNo + '\'' + ", ceroType='" + ceroType + '\'' + '}'; } }CustomerDao
Customer findById(String id);CustomerDaoImpl
public Customer findById(String id) { Customer user = null; SqlSession sqlSession = null; try { sqlSession = SqlsessionUtil.getSqlSession(); user = sqlSession.selectOne("customer.findById", id); } catch (Exception e) { e.printStackTrace(); } finally { SqlsessionUtil.closeSession(sqlSession); } return user; }测试
CustomerDaoImplTest
@Test
public void findById() throws Exception {
Customer result = customerDao.findById("9e77c26b-95f7-11e7-b376-a45d36688239");
System.out.println("查询结果 : "+result);
}
数据库数据
如上面测试结果,resultType输出结果映射仅仅id属性映射成功了。其他的都为null。就是因为属性跟数据库字段对应不上。
怎么样才能让查询结果集映射到model中呢?这时候resultMap就出现了。
resultMap 需要首先在xml中定义一个 <resultMap></resultMap>节点
<!-- resultMap 数据结果集映射map,主要作用就是将数据库中的字段跟需要映射的model的属性一一对应,
这样即使model中的属性跟数据库中的字段不一样,也能映射成功
id 这个resultMap的唯一表示,
type 需要映射的model信息-->
<resultMap id="customerMap" type="com.soft.mybatis.model.Customer">
<!-- id 属性专门用来映射主键信息,其他信息用result节点
column 数据库字段
property model属性 -->
<id column="id" property="id"/>
<!-- result 用来映射非主键信息, column property 作用跟id标签的一样-->
<result column="c_name" property="name"/>
<result column="c_sex" property="sex"/>
<result column="c_age" property="age"/>
<result column="c_ceroNo" property="ceroNo"/>
<result column="c_ceroType" property="ceroType"/>
</resultMap>
然后查询节点对其进行引用即可,引用它的id属性名。注意下面的这段,已经将resultType换成了resultMap了。
<!-- 这次用resultmap接收输出结果 -->
<select id="findById2" parameterType="string" resultMap="customerMap">
select * from t_customer where id=#{id}
</select>
然后就是实现与测试,
CustomerDao
<
aa58
/span> Customer findById2(String id);CustomerDaoImpl
public Customer findById2(String id) { Customer user = null; SqlSession sqlSession = null; try { sqlSession = SqlsessionUtil.getSqlSession(); user = sqlSession.selectOne("customer.findById2", id); } catch (Exception e) { e.printStackTrace(); } finally { SqlsessionUtil.closeSession(sqlSession); } return user; }CustomerDaoImplTest
@Test
public void findById2() throws Exception {
Customer result = customerDao.findById2("9e77c26b-95f7-11e7-b376-a45d36688239");
System.out.println("查询结果 : "+result);
}结果:
可以看出,成功将结果即映射到了customer里面。
由上面可以看出来 resultType resultMap的区别:
resultMap 仅仅是作用数据库表字段跟model的属性的映射关系而存在,当需要映射的model的属性跟数据库字段不一样的时候使用,
但是如果数据库字段名跟需要映射的moadel的属性名完全一致,resultMap可以不用,resultType足够了。
但是,真正项目中的model的属性跟表字段完全对应的概率很小。
resultType可以映射结果集为基本类型的,resultmap就无能为力了。
相关文章推荐
- 【MyBatis学习07】输出类型resultType及输出参数映射resultMap
- Mybatis 输出映射-- resultType resultMap
- 【Mybatis框架】输出映射-resultType与resultMap
- Mybatis中输出映射-resultType与resultMap的区别
- Mybatis输入映射parameterType与输出映射ResultMap是Map类型的解决方案
- Mybatis (五)输入映射 HashMap输出 传递pojo包装 resultType resultMap 动态sql
- Mybatis中输出映射resultType与resultMap的区别
- 【Mybatis框架】输出映射-resultType与resultMap
- MyBatis之输入(parameterType)与输出(resultType、resultMap)映射
- 后台(40)——MyBatis输出映射resultType以及resultMap
- MyBatis之输入与输出(resultType、resultMap)映射
- 【Mybatis框架】输出映射-resultType与resultMap
- 【Mybatis框架】输出映射-resultType与resultMap
- mybatis(六) 输入映射 输出映射 resultType:resultMap 动态sql sql片段 if判断 foreach
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap
- mybatis resultMap映射学习笔记
- MyBatis学习 之 二、SQL语句映射文件-resultMap
- mybatis 学习二、SQL语句映射文件(1)resultMap
- mybatis resultMap映射学习笔记
- MyBatis学习 之 二、SQL语句映射文件(1)resultMap