Mybatis 返回Map数据-程序员宅基地

技术标签: # Mybatis  Mybatis  

一. 方式1

接口

public interface UserMapper {
    

    List<Map<String, String>> selectTestData1();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.mapper.UserMapper">

    <select id="selectTestData1" resultType="java.util.Map">
        SELECT
          t_user.id as id,
	      t_user.email as email,
	      t_user.avatar as avatar
        FROM
	      t_user
    </select>
</mapper>

调用

@Service
public class MapTest implements CommandLineRunner {
    

    @Autowired
    private UserMapper mapper;

    @Override
    public void run(String... args) throws Exception {
    

        List<Map<String, String>> listData1 = mapper.selectTestData1();
        for (Map<String, String> map : listData1) {
    
            System.out.println(map);
        }
    }
}

在这里插入图片描述


二. 方式2

接口

import org.apache.ibatis.annotations.MapKey;

public interface UserMapper {
    

    // 指定的key必须是唯一的,否则重复的重复map的key会覆盖,如果查询的字段中没有唯一值,可以通过rowno来指定
    @MapKey("rowno")
    Map<String, Map<String,String>> selectTestData2();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.mapper.UserMapper">
	<!--
		由于mysql没有oracle中的ROWNUM功能,因此只能通过下面的方式进行模拟
	-->
    <select id="selectTestData2" resultType="java.util.Map">
        SELECT
	      @rowno := @rowno + 1 AS rowno,
	      t_user.email AS email,
	      t_user.avatar AS avatar
        FROM
	      t_user,
	      ( SELECT @rowno := 0 ) t
        ORDER BY
	      rowno DESC
    </select>
</mapper>

调用

@Service
public class MapTest implements CommandLineRunner {
    

    @Autowired
    private UserMapper mapper;

    @Override
    public void run(String... args) throws Exception {
    

        Map<String, Map<String, String>> mapData1 = mapper.selectTestData2();
        System.out.println(mapData1);
    }
}

在这里插入图片描述


三. 方式3

接口

import org.apache.ibatis.annotations.MapKey;

public interface UserMapper {
    

    // 指定的key名称必须是User实体类中的属性
    @MapKey("id")
    Map<String, User> selectTestData3();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxx.mapper.UserMapper">

    <!--由于最终是把数据封装到User实体类中,所以返回值的数据类型是User而不是Map-->
    <select id="selectTestData3" resultType="com.example.demo.transactionCom.entity.User">
        SELECT
          t_user.id as id,
          t_user.email as email,
          t_user.avatar as avatar
        FROM
          t_user
    </select>
</mapper>

调用

@Service
public class MapTest implements CommandLineRunner {
    

    @Autowired
    private UserMapper mapper;

    @Override
    public void run(String... args) throws Exception {
    

        Map<String, User> mapData2 = mapper.selectTestData3();
        Set<Map.Entry<String, User>> entries = mapData2.entrySet();
        for (Map.Entry<String, User> entry : entries) {
    
            User user = entry.getValue();
            System.out.println(user);
        }
    }
}

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feyehong/article/details/123858045

智能推荐

使用cmd命令卸载Windows系统控制面板不显示的软件或插件_cmd 调用 控制面板卸载-程序员宅基地

文章浏览阅读678次。使用cmd命令卸载Windows软件或插件_cmd 调用 控制面板卸载

Java发送邮件_autojs 引用jar-程序员宅基地

文章浏览阅读420次。通过java代码给163邮箱发邮件使用发送邮箱所需要2个jar包1、activation.jar2、mail.jar下载链接 提取码:1or01、先要激活163邮箱的pop3/smtp服务2、账户里面有个开启服务的设置我的邮箱已经开通过,你们点开启就行,开启成功有个授权码用于java代码登陆邮箱的标题发送邮箱信息的类import java.util.Iterator;imp..._autojs 引用jar

利用NODEJS+Puppeteer实现服务器保存网页为图片和PDF-程序员宅基地

文章浏览阅读1.4k次。本文适用于对docker,node有一定了解的童鞋Puppeteer简介今年5月在github上创建的项目,属于比较新的chromium无头浏览器类库。Puppeteer在项目中的实际使用基础安装选用Puppeteer的主要原因有两点,1:GOOGLE官方维护,活跃度很高,个人觉得前途光明。2:我们的产品在chrome上适配最好。目前最新版本是0.13.0,我们采用0.12.0版本..._node保存当前页面为文件

《谁说菜鸟不会数据分析》 学习笔记一-程序员宅基地

文章浏览阅读127次。二维表转换成一维表对二维表做数据透视图,然后去掉行和列的勾选,双击求和的值的单元格,会自动生成对应的一维表。 转换成: 查找重复项 1:countif 函数 2:数据--排序和筛选--高级,在高级筛选弹出框中勾选选择不重复的记录。 3:开始--条件格式--突出显示单元格规则--重复值 4:在当前工作表中对该列数据做对应的数据透视表 5:数据--数据工具--删除重..._"=if(countif(a$50:a50,a50)>1,\"\",a50)"

一文梳理联邦学习推荐系统研究进展-程序员宅基地

文章浏览阅读1.2k次。嘿,记得给“机器学习与推荐算法”添加星标推荐系统,对于我们来说并不陌生,它已经无时无刻不方便着我们的生活、学习、工作等方方面面,并且已经成为许多社交/购物/新闻平台中必不可少的组件。近些年..._联邦学习旅游推荐

浅析:精密空调能耗超高的原因!-程序员宅基地

文章浏览阅读965次。近年来,精密空调的使用率增大,但同时越来越多的企业发现,精密空调在带来一些好处的同时,弊端日益突出,耗能超高,怎么解决这种问题?从哪些方面入手?专家给出了以下答案:  技..._機房精密空調適度超高

随便推点

封神台 第二章 绕过WAF_用modheader绕过waf-程序员宅基地

文章浏览阅读690次。封神台 第二章 利用ModHeader绕过WAF _用modheader绕过waf

SAM轻量级改进RepViT-SAM论文解读RepViT-SAM: Towards Real-Time Segmenting Anything_repvit-sam: towards real-time segmenting anything.-程序员宅基地

文章浏览阅读1.1k次,点赞16次,收藏21次。SAM由一个重量级的基于vit的图像编码器和一个轻量级的提示引导掩码解码器组成。其巨大的图像编码器占据了大部分的推理时间开销。_repvit-sam: towards real-time segmenting anything.

基于Python和openCV的人脸识别研究与实现_python opencv人脸特征提取与检测-程序员宅基地

文章浏览阅读931次,点赞6次,收藏11次。本次人脸识别系统的设计包括数据收集及训练功能,人脸识别功能,删除数据功能,查询数据功能,以及登录、登出管理员和更改密码功能。其中,数据收集及训练,删除数据以及查询数据需要管理员权限,而登录管理员需要密码,登录后登录管理员按钮会更换为修改密码。_python opencv人脸特征提取与检测

2019-03-20-npm中bin字段的用法&百度搜索的坑_@bin的用法-程序员宅基地

文章浏览阅读337次。今天在一个npm项目中需要添加一个运行脚本至bin字段添加后大概长这样:这样,在命令行中直接输入socketev就会执行后面的文件。添加后执行却报错:zlxdeMacBook-Pro:socketProxy zlx$ socketDev-bash: socketDev: command not found应该是环境没有这个脚本,查一下百度:难道要重新install一次?重..._@bin的用法

MATLAB——RBF、GRNN和PNN神经网络案例参考程序_rbf神经网络matlab代码-程序员宅基地

文章浏览阅读872次。RBF神经网络参考程序_rbf神经网络matlab代码

TestNG-初识 Hello World_testng是什么-程序员宅基地

文章浏览阅读1.6k次。最近因为工作需要,要了解TestNG并应用到项目的单元测试和集成测试中。准备写点文章,记录一下对TestNG的使用和了解。这篇文章是这个系列的第一篇,简要介绍TestNG是什么,以及如何使用TestNG编写一个Hello World程序。_testng是什么

推荐文章

热门文章

相关标签