MyBatis基础篇之映射文件---如何通过select返回Map
2018-03-14 14:04
459 查看
一、前言
本文主要通过代码讲解映射文件中select标记里面如何返回Map,通过一个小demo说明一下。二、案例
♦参照<<MyBatis基础篇之简单入门>>和<<MyBatis基础篇之映射文件—如何通过select返回List>>这一章节,搭建工程MyBatisReturnMapDemo
♦在MySQL下新建数据库表t_user,并插入若干条数据
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', '路西', '路飞假扮选手', '打败多弗朗明哥。。。');[/code]
♦Java类User.java,配置文件mybatis-config.xml,db.properties,log4j.properties等配置文件直接拷贝<<MyBatis基础篇之映射文件—如何通过select返回List>>工程的文件
♦新建接口类UserMapper.java,增加接口方法getUserByIdReturnMap,返回单条记录存入Map
/** * @since 2017-08-06 * @author queen * 定义一个UserMapper接口 * */ public interface UserMapper { /** * 返回一条记录的Map,key是列名,值就是对应的值 * @param id * @return */ public Map<String,Object> getUserByIdReturnMap(int id); }[/code]
♦新建UserMapper.xml文件,文件配置如下:
<select id="getUserByIdReturnMap" resultType="map"> select id, loginId, userName, role, note from t_user where id=#{id} </select>[/code]
♦新建MyBatisTest.java类,新增测试方法testGetUserByIdReturnMap()
@Test public void testGetUserByIdReturnMap() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { UserMapper mapper = openSession.getMapper(UserMapper.class); Map<String,Object> map = mapper.getUserByIdReturnMap(1); System.out.println(map); } finally { openSession.close(); } }[/code]
♦测试,控制台打印结果如下:
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=专门负责提鞋的。。。}[/code] 从控制台可以看到,返回了一条数据,key是列名,值就是对应的值
♦上面的例子是返回单条记录放入Map,那如果返回多条记录封装成一个Map,那么我们要怎么配置呢?
♦修改接口类UserMapper.java,增加接口方法getAllUsersReturnMap,返回多条记录存入Map
/** * 多条记录封装成一个Map,Map<Integer,User>:键是这条记录的主键,值是这条记录封装后的JavaBean * @param id * @return */ @MapKey("id") public Map<Integer,User> getAllUsersReturnMap();[/code]@MapKey(“id”)表示:告诉MyBatis封装这个Map的时候使用哪个属性作为map的key
♦修改UserMapper.xml文件,配置如下:
<select id="getAllUsersReturnMap" resultType="com.queen.mybatis.bean.User"> select id, loginId, userName, role, note from t_user </select>[/code]注意:这里的返回值resultType是User类型,而不是一个Map
♦修改MyBatisTest.java测试文件,增加testGetUserByIdReturnMap测试方法如下:
@Test public void testGetAllUsersReturnMap() throws IOException { SqlSessionFactory sqlSessionFactory = getSqlSessionFactory(); SqlSession openSession = sqlSessionFactory.openSession(); try { UserMapper mapper = openSession.getMapper(UserMapper.class); Map<Integer,User> map = mapper.getAllUsersRet cbe1 urnMap(); System.out.println(map); } finally { openSession.close(); } }[/code]
♦测试,控制台打印结果如下:
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=打败多弗朗明哥。。。]}[/code]上述打印结果可以直观的看到,返回多条记录时,key是ID主键,value是一个User的JavaBean
♦为了验证上述@MapKey注解的作用,我们修改一下@MapKey(“userName”)
@MapKey("userName") public Map<Integer,User> getAllUsersReturnMap();[/code]
♦测试,控制台打印结果如下:
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=专门负责提鞋的。。。]}[/code]键变成了userName来作为Map的key至此,我们关于MyBatis基础篇之映射文件—如何通过select返回Map介绍完毕。我们下一节将介绍如何通过resultMap自定义结果映射。原创地址:http://www.marsitman.com/mybatis/mybatis-select-map.html
相关文章推荐
- mybatis 的mapper映射文件返回一个map
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- MyBatis学习-映射文件标签篇(select、resultMap)
- mybatis3的返回结果集如何映射到对应的bean或者是map中?
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- MyBatis映射文件的resultMap如何做表关联
- mybatis--mapper映射文件配置之select,resultMap
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- MyBatis映射文件的resultMap如何做表关联
- MyBatis映射文件的resultMap如何做表关联
- MyBatis映射文件的resultMap如何做表关联
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- 深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap
- 4.4 MyBatis_映射文件_select_resultMap解析
- MyBatis映射文件的resultMap如何做表关联
- Mybatis 源码学习笔记(八)mapper映射文件配置之select、resultMap
- MyBatis映射文件的resultMap如何做表关联