mybatis的返回值问题

使用mybatis框架,DAO层中一些特殊的返回值,例如:list,set,map集合,在查询出数据之后,如何按照指定的返回值封装。
以下是一些常用的封装方式

 

1.结果集封装成List集合

 DAO

//获取所有的User对象,并将查询出来的User对象封装到List集合中
public LinkedList<User> getUserList();
	

UserMapper.xml

<!-- public LinkedList<User> getUserList(); 
     返回的是List集合,resultType指定数据封装的对象
     resultType="com.mybatis.bean.User"
-->
<select id="getUserList" resultType="com.mybatis.bean.User">
	select * from User
</select>

 

2.结果集封装成Map集合

DAO

/**
 *  把sql返回的每一条数据封装成User,并将所有的User对象封装成Map集合
 *  key对应的是Integer类型的主键
 *  @return Map
 */
@MapKey("id") //告诉Mybatis查询出来的结果集封装到Map集合中,使用结果集中的id值作为key
public Map<Integer,User> getMap();

UserMapper.xml

<!-- public Map<Integer,User> getMap();
     resultType : 指定查询出的数据封装成User 对象
     @MapKey("id") : 每条数据的id字段作为key
 -->
<select id="getMap" resultType="com.mybatis.bean.User">
	select * from User
</select>

 

3.结果集封装成 List<Map<String,Object>>

List<Map<String ,String >>的类型,这个类型可以存放多个map,且map中可以放多个键值对;

封装规则:查询出来的每一条数据都会被封装成一个map集合,每一条数据的列 被封装成键值对 (列名为key)

 

DAO

// 查询用户的所有菜单
public List<Map<String,Object>> findUserMenus(Integer userId);

Mapper.xml

<!-- 查询登陆用户可见的所有菜单  (每一条数据都封装成一个map集合)  -->
<select id="findUserMenus" resultType="map">
	select 
	     m.id,
	     m.name,
	     m.url,
	     m.parentId
	from sys_user_roles ur 
                join sys_role_menus rm 
                join sys_menus m
         		on ur.role_id = rm.role_id and rm.menu_id = m.id 
		       and  ur.user_id = #{id}
		where type = 1
</select>

 

Demo演示:

说明:
对 List<Map<String,Object>> 集合解析:用两个for循环,第一个for循环获取list集合中的map,第二个解析map中的数据,根据m.entrySet()就可以得到查询出来的字段,然后根据 getKey  getValue 获取对应的对象
 

@Test
public void menus() {
    SysUserService bean = ac.getBean("userService",SysUserService.class);
    
    //查询id为3的用户所有菜单
    List<Map<String,Object>> list = bean.findUserMenus(3);
    
    //遍历所有数据
    for(Map<String,Object> m :list) {
	
        for( Entry<String,Object> en: m.entrySet()) {
	    System.out.println("key="+en.getKey()+"...value="+en.getValue());
        }
	System.out.println("--end--"+"\r\n"); //每遍历一个map标记一次
     }
}

console 输出

key=name...value=产品管理
key=id...value=3
key=url...value=请求路径
--end--

key=name...value=项目信息
key=id...value=11
key=url...value=project/listUI.do
key=parentId...value=3
--end--

key=name...value=团信息
key=id...value=12
key=url...value=team/listUI.do
key=parentId...value=3
--end--

key=name...value=产品信息
key=id...value=13
key=url...value=product/listUI.do
key=parentId...value=3
--end--

key=name...value=产品分类
key=id...value=140
key=url...value=type/listUI.do
key=parentId...value=3
--end--

如上:查询用户3的所有菜单,共5条数据,每一条都被封装成map集合 (每列作为集合的 键值对)。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值