首页 > 代码库 > 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