MyBatis应用开发(10)映射之结果映射resultType

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis应用开发(10)映射之结果映射resultType相关的知识,希望对你有一定的参考价值。

1.1. resultType

1.1.1. 结果为单条记录

查询结果为单条记录时,resultType应该为一个Java Bean类型。

 

select语句的查询结果字段列表可以和resultType指定的Java Bean类型的属性列表不同,字段可以没有对应的属性,属性也可以没有对应的字段,即允许存在多余的字段,或者多余的属性。

<!--

  findPersonById:根据id查找单个记录。

  id:SQL语句的ID,应该与PersonMapper接口的findPersonById方法一一对应。

  parameterType:参数的Java类型。

  resultType:结果的Java类型。

 -->

 <select id="findPersonById" parameterType="java.lang.String" resultType="com.test.mybatis3.pojo.Person">  

      select id,name,status,‘AAAAA‘ level from  t_person where id=#{id}select * from  t_person where id=#{id}

</select>

 

 

Person类定义如下:

/**   

* @Title: Person.java

* @Package com.test.mybatis3.pojo

* @Description:

* @author http://www.cnblogs.com/coe2coe/

* @date 2017年4月9日 下午3:21:32

* @version V1.0   

*/

package com.test.mybatis3.pojo;

 

/**

* @ClassName: Person

* @Description:

* @author http://www.cnblogs.com/coe2coe/

* @date 2017年4月9日 下午3:21:32

*  

*/

public class Person {

 

//查询结果记录中并无address字段

private  String  address;

private  String id;

private  String name;

private  int    status;

//用于满足POJO要求的无参数构造函数。

public Person()

{

 

}

//用于简化测试代码。

public Person(String id, String name, int status) {

super();

this.id = id;

this.name = name;

this.status = status;

}

public String getAddress() {

return address;

}

public String getId() {

return id;

}

public String getName() {

return name;

}

public int getStatus() {

return status;

}

public void setAddress(String address) {

this.address = address;

}

public void setId(String id) {

this.id = id;

}

 

public void setName(String name) {

this.name = name;

}

 

public void setStatus(int status) {

this.status = status;

}

 

@Override

public String toString() {

return "Person [id=" + id + ", name=" + name + ", status=" + status + ",address=" + address+"]";

}

}

 

 

 

Person类中没有名称为level的属性,但是字段列表中存在名为level的字段。

Person类中有名称为address的属性,但是字段列表中不存在名为address的字段。

 

单元测试代码如下:

//找到MyBatis自动实现的PersonMapper接口的代理对象。

PersonMapper  personMapper = session.getMapper(PersonMapper.class);

Person  person;

//根据Person的对象的属性id的值进行查找。

Person  p = new Person();

p.setId("zhangsan");

person = personMapper.findPersonByIdOfPerson(p);

System.out.println(person);

 

 

 

 

运行结果如下:

0    [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonByIdOfPerson  - ==>  Preparing: select id,name,status,‘AAAAA‘ level from t_person where id=?

55   [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonByIdOfPerson  - ==> Parameters: zhangsan(String)

70   [main] TRACE com.test.mybatis3.mapper.PersonMapper.findPersonByIdOfPerson  - <==    Columns: id, name, status, level

72   [main] TRACE com.test.mybatis3.mapper.PersonMapper.findPersonByIdOfPerson  - <==        Row: zhangsan, zhang san, 0, AAAAA

73   [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonByIdOfPerson  - <==      Total: 1

Person [id=zhangsan, name=zhang san, status=0,address=null]

 

 

1.1.2. 结果为多条记录

查询结果为多条记录时,可以将结果记录集映射到List类型的集合上。具体方法请参照结果为单条记录的映射方法,主要变化是Mapper方法的结果类型是集合类型。为了节省篇幅,在此不再赘述。

 

1.1.3. 结果为单个值

查询结果为单个值时,可以将结果映射到一个Java基本类型上。

 

 

<!-- findPersonNameById:

     parameterType: java.lang.String

     resultType:    java.lang.String

 -->

<select id="findPersonNameById" parameterType="string" resultType="string" >

select name  from t_person where id=#{id}

</select>

 

 

 

Mapper接口的方法:

String findPersonNameById(String id) throws Exception;

 

 

 

单元测试代码:

//打开Session。

session = sessionBuilder.openSession();

 

//找到MyBatis自动实现的PersonMapper接口的代理对象。

PersonMapper  personMapper = session.getMapper(PersonMapper.class);

 

//根据person 的id查找name。

String name = personMapper.findPersonNameById("zhangsan");

System.out.println(name);

 

 

运行结果如下:

0    [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonNameById  - ==>  Preparing: select name from t_person where id=?

40   [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonNameById  - ==> Parameters: zhangsan(String)

155  [main] TRACE com.test.mybatis3.mapper.PersonMapper.findPersonNameById  - <==    Columns: name

156  [main] TRACE com.test.mybatis3.mapper.PersonMapper.findPersonNameById  - <==        Row: zhang san

166  [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonNameById  - <==      Total: 1

zhang san

 

以上是关于MyBatis应用开发(10)映射之结果映射resultType的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis应用开发(11)映射之结果映射字段别名和HashMap

MyBatis应用开发映射之select语句

MyBatis从入门到精通:MyBatis高级结果映射之一对多映射

精通Mybatis之结果集处理流程与映射体系(联合查询与嵌套映射)

MyBatis之Mapper XML 文件详解-自动映射查询结果

精通Mybatis之结果集处理流程与映射体系(重点mybatis嵌套子查询,循环依赖解决方案)