首页 > 代码库 > MyBatis应用开发(10)映射之结果映射resultType
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