Mybatis @MapKey注解实现List转Map

文章目录


@MapKey介绍

在MyBatis中,@MapKey 主要用于在映射查询结果到一个Map。

当你执行一个查询并期望返回一个Map时,你可以使用@MapKey来进行结果集的映射。而Mybatis内部会将查询到的结果映射为一个key-value的形式。

@MapKey示例

有这么一个场景,需要查询用户列表,并转为Map,map的key为用户ID。

User类:

java 复制代码
@Data
@TableName("sys_user")
public class User implements Serializable {
    private static final long serialVersionUID = -6525322309638123441L;

    @PropIgnore
    @TableId(type = IdType.AUTO)
    private Integer userId;

    private String userName;

    private String password;

    private String salt;

    private String phone;

    private String sex;

    private String email;

    private String nickName;

    private String address;

    private Date createTime;

    private Date updateTime;
}

- 传统的写法

Controller:

java 复制代码
    @ApiOperation(value="@MapKey获取用户列表",notes="@MapKey获取用户列表")
    @GetMapping("getUsers")
    public void getUsers() {
        List<User> userList = userMapper.getUsers();
        Map<Integer, User> userMap = userList.stream().collect(Collectors.toMap(User::getUserId, user -> user, (v1, v2) -> v1));
    }

Mapper:

java 复制代码
List<User> getUsers();

Mapper.xml:

java 复制代码
    <select id="getUsers" resultType="com.joker.pojo.User">
        select * from sys_user limit 100
    </select>

- @MapKey的写法

Controller:

java 复制代码
    @ApiOperation(value="@MapKey获取用户列表",notes="@MapKey获取用户列表")
    @GetMapping("getUsers")
    public void getUsers() {
        Map<Integer, User> userMap = userMapper.getUserIdMapUsers();
    }

Mapper:

java 复制代码
	@MapKey("userId")
    Map<Integer, User> getUserIdMapUsers();

注意:userId为User类的字段名称,而非数据库表的字段名称

Mapper.xml:

java 复制代码
    <select id="getUserIdMapUsers" resultType="com.joker.pojo.User">
        select * from sys_user limit 100
    </select>
相关推荐
Allen Bright19 小时前
【MyBatis-9】MyBatis分页插件PageHelper深度解析与实践指南
mybatis
柴薪之王、睥睨众生1 天前
(自用)Java学习-5.8(总结,springboot)
java·开发语言·spring boot·学习·mybatis
唐僧洗头爱飘柔95272 天前
【SSM-SSM整合】将Spring、SpringMVC、Mybatis三者进行整合;本文阐述了几个核心原理知识点,附带对应的源码以及描述解析
java·spring·mybatis·springmvc·动态代理·ioc容器·视图控制器
意倾城2 天前
浅说MyBatis-Plus 的 saveBatch 方法
java·mybatis
Brilliant Nemo2 天前
五、框架实战:SSM整合原理和实战
maven·mybatis
小赵面校招2 天前
Spring Boot整合MyBatis全攻略:原理剖析与最佳实践
java·spring boot·mybatis
小赵面校招2 天前
SpringBoot整合MyBatis-Plus:零XML实现高效CRUD
xml·spring boot·mybatis
悟空打码3 天前
MyBatis源码解读5(3.1、缓存简介)
缓存·mybatis
多多*3 天前
Java反射 八股版
java·开发语言·hive·python·sql·log4j·mybatis
Auc243 天前
OJ判题系统第4期之判题机模块架构——设计思路、实现步骤、代码实现(工厂模式、代理模式的实践)
java·spring cloud·log4j·mybatis·代理模式·工厂模式