本文主要通过代码讲解映射文件中select标记里面如何返回Map,通过一个小demo说明一下。
CREATE TABLE t_user (
id int(10) NOT NULL AUTO_INCREMENT,
loginId varchar(20) DEFAULT NULL,
userName varchar(100) DEFAULT NULL,
role varchar(255) DEFAULT NULL,
note varchar(255) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
INSERT INTO t_user(loginId,userName,role,note) VALUES ('queen', '奎恩', '海贼王副把手', '专门负责提鞋的。。。');
INSERT INTO t_user(loginId,userName,role,note) VALUES ('king', '金狮子', '海贼王前大海贼把手', '磁性果实能力');
INSERT INTO t_user(loginId,userName,role,note) VALUES ('Lucy', '路西', '路飞假扮选手', '打败多弗朗明哥。。。');
/**
* @since 2017-08-06
* @author queen
* 定义一个UserMapper接口
*
*/
public interface UserMapper {
/**
* 返回一条记录的Map,key是列名,值就是对应的值
* @param id
* @return
*/
public Map getUserByIdReturnMap(int id) ;
}
<select id="getUserByIdReturnMap" resultType="map">
select id, loginId, userName, role, note from t_user where id=#{id}
select>
@Test
public void testGetUserByIdReturnMap() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = openSession.getMapper(UserMapper.class);
Map map = mapper.getUserByIdReturnMap(1);
System.out.println(map);
} finally {
openSession.close();
}
}
2017-08-06 22:57:38,473 [main] [com.queen.mybatis.mapper.UserMapper.getUserByIdReturnMap]-[DEBUG] ==> Preparing: select id, loginId, userName, role, note from t_user where id=?
2017-08-06 22:57:38,538 [main] [com.queen.mybatis.mapper.UserMapper.getUserByIdReturnMap]-[DEBUG] ==> Parameters: 1(Integer)
2017-08-06 22:57:38,581 [main] [com.queen.mybatis.mapper.UserMapper.getUserByIdReturnMap]-[DEBUG] <== Total: 1
{id=1, loginId=queen, role=海贼王副把手, userName=奎恩, note=专门负责提鞋的。。。}
从控制台可以看到,返回了一条数据,key是列名,值就是对应的值
/**
* 多条记录封装成一个Map,Map:键是这条记录的主键,值是这条记录封装后的JavaBean
* @param id
* @return
*/
@MapKey("id")
public Map getAllUsersReturnMap() ;
@MapKey(“id”)表示:告诉MyBatis封装这个Map的时候使用哪个属性作为map的key
<select id="getAllUsersReturnMap" resultType="com.queen.mybatis.bean.User">
select id, loginId, userName, role, note from t_user
select>
注意:这里的返回值resultType是User类型,而不是一个Map
@Test
public void testGetAllUsersReturnMap() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try {
UserMapper mapper = openSession.getMapper(UserMapper.class);
Map map = mapper.getAllUsersReturnMap();
System.out.println(map);
} finally {
openSession.close();
}
}
2017-08-06 23:11:20,001 [main] [com.queen.mybatis.mapper.UserMapper.getAllUsersReturnMap]-[DEBUG] ==> Preparing: select id, loginId, userName, role, note from t_user
2017-08-06 23:11:20,054 [main] [com.queen.mybatis.mapper.UserMapper.getAllUsersReturnMap]-[DEBUG] ==> Parameters:
2017-08-06 23:11:20,102 [main] [com.queen.mybatis.mapper.UserMapper.getAllUsersReturnMap]-[DEBUG] <== Total: 3
{1=User [id=1, loginId=queen, userName=奎恩, role=海贼王副把手, note=专门负责提鞋的。。。], 2=User [id=2, loginId=king, userName=金狮子, role=海贼王前大海贼把手, note=磁性果实能力], 3=User [id=3, loginId=Lucy, userName=路西, role=路飞假扮选手, note=打败多弗朗明哥。。。]}
上述打印结果可以直观的看到,返回多条记录时,key是ID主键,value是一个User的JavaBean
@MapKey("userName")
public Map getAllUsersReturnMap() ;
2017-08-06 23:19:41,081 [main] [com.queen.mybatis.mapper.UserMapper.getAllUsersReturnMap]-[DEBUG] ==> Preparing: select id, loginId, userName, role, note from t_user
2017-08-06 23:19:41,136 [main] [com.queen.mybatis.mapper.UserMapper.getAllUsersReturnMap]-[DEBUG] ==> Parameters:
2017-08-06 23:19:41,191 [main] [com.queen.mybatis.mapper.UserMapper.getAllUsersReturnMap]-[DEBUG] <== Total: 3
{金狮子=User [id=2, loginId=king, userName=金狮子, role=海贼王前大海贼把手, note=磁性果实能力], 路西=User [id=3, loginId=Lucy, userName=路西, role=路飞假扮选手, note=打败多弗朗明哥。。。], 奎恩=User [id=1, loginId=queen, userName=奎恩, role=海贼王副把手, note=专门负责提鞋的。。。]}
键变成了userName来作为Map的key
至此,我们关于MyBatis基础篇之映射文件—如何通过select返回Map介绍完毕。我们下一节将介绍如何通过resultMap自定义结果映射。
原创地址:http://www.marsitman.com/mybatis/mybatis-select-map.html