首页 > 代码库 > MyBatis应用开发(11)映射之结果映射字段别名和HashMap

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

1.1.1. 字段别名的特殊功能

通过SQL语句的字段别名功能,可以将记录映射到resultType指定的Java Bean类型的属性的属性上。

 

<!-- 通过定义select语句的字段别名为XXX.YYY的形式,可以将字段值赋值给PersonWrapper类的属性person的属性 -->

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

    select id "person.id",name "person.name",status "person.status" from  t_person where id=#{id}

</select>

 

 

PersonWrapper的定义如下:

/**   

* @Title: PersonWrapper.java

* @Package com.test.mybatis3.pojo

* @Description:

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

* @date 2017年4月14日 下午10:52:05

* @version V1.0   

*/

package com.test.mybatis3.pojo;

 

/**

* @ClassName: PersonWrapper

* @Description:

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

* @date 2017年4月14日 下午10:52:05

*  

*/

public class PersonWrapper {

 

Person  person;

 

public Person getPerson() {

return person;

}

 

public void setPerson(Person person) {

this.person = person;

}

}

 

 

 

PersonMapper接口的对应方法定义如下:

/**

 * 根据ID查找单个记录。

 * *@param  person,使用Person对象的id属性。

 * *@return Person类的包装类.

 */

PersonWrapper  findPersonWrapper(Person person) throws Exception;

 

 

 

单元测试代码如下:

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

Person  p = new Person();

p.setId("zhangsan");

PersonWrapper personWrapper = personMapper.findPersonWrapper(p);

System.out.println(personWrapper);

 

 

运行结果如下:

0    [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonWrapper  - ==>  Preparing: select id "person.id",name "person.name",status "person.status" from t_person where id=?

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

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

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

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

com.test.mybatis3.pojo.PersonWrapper@1881071

 

 

1.1.2. 使用HashMap

resultType可以使用HashMap来映射一条记录的所有字段。HashMap的别名可以使用hashmap

<!-- resultType:hashmap,即HashMap -->

<select id="findPersonByNameHashMap" parameterType="com.test.mybatis3.pojo.Criteria" resultType="hashmap">  

    select * from  t_person where name like ‘%${person.name}%‘

</select>

 

 

 

 

PersonMapper接口的方法定义:

/**

 * 使用HashMap<String,Object>作为返回值,MyBatis将一条记录的所有字段保存在hashmap中。

 * @param criteria

 * @return

 * @throws Exception

 */

List<HashMap<String,Object>>  findPersonByNameHashMap(Criteria  criteria) throws Exception;

 

 

 

单元测试代码:

@Test

public void testFindPersonByNameHashMap() throws Exception

{

 

//使用SqlMapConfig.xml配置文件。

InputStream  is = Resources.getResourceAsStream("SqlMapConfig.xml");

 

//构造MyBatis的SessionFactory对象.

SqlSessionFactory  sessionBuilder = new SqlSessionFactoryBuilder().build(is);

 

//将会指向MyBatis的Session对象实例。

SqlSession  session = null;

try{

//打开Session。

session = sessionBuilder.openSession();

 

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

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

 

//根据查询条件查找。

Criteria  criteria = new Criteria();

criteria.getPerson().setName("zhang");

List<HashMap<String,Object>> persons = personMapper.findPersonByNameHashMap(criteria);

System.out.println(persons);

 

 

}

catch(Exception ex){

ex.printStackTrace();

throw ex;

}

finally{

//确保关闭session对象。

if(null != session){

session.close();

session = null;

}

}

}

 

 

运行结果:

0    [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonByNameHashMap  - ==>  Preparing: select * from t_person where name like ‘%zhang%‘

35   [main] DEBUG com.test.mybatis3.mapper.PersonMapper.findPersonByNameHashMap  - ==> Parameters:

129  [main] TRACE com.test.mybatis3.mapper.PersonMapper.findPersonByNameHashMap  - <==    Columns: id, name, status

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

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

[{name=zhang san, id=zhangsan, status=0}]

 

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