(九)MyBatis查询语句的返回值类型

2023/11/30 10:12:20

文章目录

  • 环境
  • 返回一条结果,使用实体类
  • 返回多条结果,使用List
  • 返回一条结果,使用Map
  • 返回多条结果,使用List套Map
  • 返回多条结果,使用Map套Map

上一篇:(七)Mybatis传值中#{}和${}的区别,及别名机制

环境

数据库:汽车表t_car
引⼊依赖:mysql驱动依赖、mybatis依赖、logback依赖、junit依赖。
引入配置文件:jdbc.properties、mybatis-config.xml、logback.xml
pojo类:Car
SqlSession工具类:SqlSessionUtil
都可以复制之前的

返回一条结果,使用实体类

当查询的结果,有对应的实体类,并且查询结果只有⼀条时:
创建CarMapper接口,并添加方法

public interface CarMapper {
    /**
     * 根据id查询
     * @param id
     * @return
     */
    Car selectById(Long id);
}

创建CarMapper.xml映射文件进行配置

	<select id="selectById" resultType="car">
        select
            id,car_num as carNum,brand,guide_price as guidePrice,
            produce_time as produceTime,
            car_type as carType
        from t_car where id = #{id}
    </select>

测试程序

	@Test
    public void testSelectById(){
        SqlSession session = SqlSessionUtil.getSession();
        CarMapper mapper = session.getMapper(CarMapper.class);
        Car car = mapper.selectById(13L);
        System.out.println(car);
        SqlSessionUtil.close(session);
    }

结果
请添加图片描述

返回多条结果,使用List

当查询的记录条数是多条的时候,必须使⽤集合接收。如果使用单个实体类接收会出现异常。
测试返回多条返回单个实体类
接口添加方法

	Car selectAll();

映射文件配置

	<select id="selectAll" resultType="car">
        select
            id,car_num as carNum,brand,guide_price as guidePrice,
            produce_time as produceTime,
            car_type as carType
        from t_car
    </select>

测试程序

	@Test
    public void testSelectAll(){
        SqlSession session = SqlSessionUtil.getSession();
        CarMapper mapper = session.getMapper(CarMapper.class);
        Car car1 = mapper.selectAll();
        System.out.println(car1);
        SqlSessionUtil.close(session);
    }

结果,发生异常,原因是Mybatis进行自动类型推断,发现你设置的返回值是单个的实体类就执行selectOne方法,然后发现最终返回结果是多条,就引发了异常
请添加图片描述
接口中的方法应改为

List<Car> selectAll();

测试程序改为

	@Test
    public void testSelectAll(){
        SqlSession session = SqlSessionUtil.getSession();
        CarMapper mapper = session.getMapper(CarMapper.class);
        List<Car> cars = mapper.selectAll();
        //Car car1 = mapper.selectAll();
        //System.out.println(car1);
        cars.forEach(car -> System.out.println(car));
        SqlSessionUtil.close(session);
    }

执行成功
请添加图片描述

返回一条结果,使用Map

当返回的数据,没有合适的实体类对应的话,可以采用Map集合接收。Mtbais底层会自动把查询结果的字段名做key,字段值做value进行存储
查询如果可以保证只有⼀条数据,则返回⼀个Map集合即可。

接口添加方法:

	Map<String ,Object> slectByIdRetMap(Long id);

映射文件配置:
resultMap=“map”,这是因为mybatis内置了很多别名。

	<select id="slectByIdRetMap" resultType="map">
        select
            id,car_num as carNum,brand,guide_price as guidePrice,
            produce_time as produceTime,
            car_type as carType
        from t_car where id = #{id}
    </select>

测试程序:

	@Test
    public void testSlectByIdRetMap(){
        SqlSession session = SqlSessionUtil.getSession();
        CarMapper mapper = session.getMapper(CarMapper.class);
        Map<String, Object> map = mapper.slectByIdRetMap(13L);
        System.out.println(map);
        SqlSessionUtil.close(session);
    }

请添加图片描述

返回多条结果,使用List套Map

查询结果条数大于等于1条数据,则可以返回⼀个存储Map集合的List集合。List<Map>等同于List<Car>
接口添加方法:

    List<Map<String ,Object>> selectAllRetListMap();

映射文件配置:

	<select id="selectAllRetListMap" resultType="map">
        select *
        from t_car
    </select>

测试程序:

	@Test
    public void testSelectAllRetListMap(){
        SqlSession session = SqlSessionUtil.getSession();
        CarMapper mapper = session.getMapper(CarMapper.class);
        List<Map<String, Object>> listMaps = mapper.selectAllRetListMap();

        listMaps.forEach(listMap -> System.out.println(listMap));
        SqlSessionUtil.close(session);
    }

请添加图片描述

返回多条结果,使用Map套Map

拿Car的id做key,以后取出对应的Map集合时更方便。
Map集合的key一般是主键值,需要通过@MapKey注解标明
接口添加方法:

    @MapKey("id")
    Map<Long ,Map<String ,Object>> selectAllRetMap();

映射文件配置:

	<select id="selectAllRetMap" resultType="map">
        select *
        from t_car
    </select>

测试程序:

	@Test
    public void testSelectAllRetMap(){
        SqlSession session = SqlSessionUtil.getSession();
        CarMapper mapper = session.getMapper(CarMapper.class);
        Map<Long, Map<String, Object>> longMapMap = mapper.selectAllRetMap();
        System.out.println(longMapMap);
        SqlSessionUtil.close(session);
    }

请添加图片描述


http://www.jnnr.cn/a/106499.html

相关文章

【软件测试】毕业打工两年,辞职一年后转行月薪18K,软件测试让我发起了第一春......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 小徐&#xff1a; 毕…

Elasticsearch Analyzer 内置分词器

Elasticsearch Analyzer 内置分词器 篇主要介绍一下 Elasticsearch中 Analyzer 分词器的构成 和一些Es中内置的分词器 以及如何使用它们 前置知识 es 提供了 analyze api 可以方便我们快速的指定 某个分词器 然后对输入的text文本进行分词 帮助我们学习和实验分词器 POST _a…

1.pytorch学习:安装pytorch

目录 安装pytorch 检查pytorch安装是否成功 总结 安装pytorch 官方网址&#xff1a; Start Locally | PyTorchhttps://pytorch.org/get-started/locally/ 官网的conda安装方式&#xff0c;没有指定各种组件的版本&#xff0c;因为好多算法是规定了pytorch版本&#xff0c;…

0084 快速排序、归并排序、基数排序,常用算法排序总结

import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; /* * 快速排序&#xff1a;对冒泡排序的一种改进 * 通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据要小 * 再按此方法对这…

CSDN 重新开放付费资源的上传了,但要求如下

csdn上半年关闭了付费资源的上传功能&#xff0c;经过几个月的优化处理&#xff0c;现在又重新 开放了。 优化后的上传功能&#xff0c;必须达到一定的级别才能实现&#xff0c;所以并不是向以前一样&#xff0c;都可以上传。 虽然网站上已经公布了具体的要求说明 &#xff0…

Oracle技术分享控制文件自动备份

在打开控制文件自动备份的情况下&#xff0c;我们增加了数据文件&#xff0c;表空间等操作&#xff0c;会自动进行控制文件备份&#xff0c;但这个控制文件的备份&#xff0c;不是马上进行的&#xff0c;而是要等10分钟左右&#xff0c;才会执行&#xff0c;如下&#xff1a; 2…

mac为什么不支持ntfs,mac读取ntfs移动硬盘软件有哪些

品牌型号&#xff1a;MacBook Pro 2020款 系统&#xff1a; macOS11.6.5 软件版本&#xff1a;Tuxera NTFS for Mac 熟悉mac电脑的用户都知道&#xff0c;Mac原生系统不能写入NTFS格式硬盘&#xff0c;但是Windows电脑可以正常使用NTFS格式硬盘&#xff0c;mac为什么不支持n…

嵌入式开发:选择嵌入式GUI生成器时要注意什么

为你的设备选择嵌入式GUI生成器时&#xff0c;有几个因素需要考虑&#xff0c;以确保无缝的设计和嵌入式开发流程。下面我们列出了在选择嵌入式GUI生成器时要考虑的四大特性&#xff0c;而不考虑应用程序。 直观的工作流程系统 对于嵌入式GUI生成器&#xff0c;一个直观的工作流…

总结:基于flask+vue搭建的电商后台管理系统——大学毕业设计出售

1.概述 在学习完flask、vue之后&#xff0c;决定使用这两个框架搭建一个电商后台管理系统&#xff0c;用作与整合最近所学的知识&#xff0c;并且打算出售自己搭建好的项目。 2.所用到的开发环境 flask&#xff1a;1.1.2vue&#xff1a;2.6.14axios&#xff1a;1.1.2charts&…

3000+长文带你进入KMP算法思想

1. 基本介绍 原文最先在博客园发布&#xff0c;原地址&#xff1a;3000长文带你进入KMP算法思想 1.1 说明 时间复杂度&#xff1a;O(N)O(N)O(N)&#xff1b; 空间复杂度&#xff1a;O(N)O(N)O(N)&#xff1b; KMP 算法是一种字符串匹配算法&#xff0c;是对传统朴素匹配算法…

文本输入编辑框 EditText

目录 一、EditText简单介绍 二、EditText外观 1.隐藏EditTExt边框 2.自定义EditText边框 三、监听焦点变更事件 一、EditText简单介绍 编辑框 EditText 用来接收软件键盘输入的文字&#xff0c;例如用户名、密码、评价内容等&#xff0c;它是由文本视图派生而来的&#xff…

[ACTF2020 新生赛] Include1

1.看题如下 有个tips&#xff0c;点进去看看 &#xff0c;发现一串Can you find out the flag? 检查网页源码&#xff0c;发现啥也没有 但是题目中提示了关键字Include文件包含&#xff0c;flag值应该就存在这个flag.php文件中&#xff0c;URL加入后缀/?filephp://filter/con…

有一个是对的,就是坚持去做难的事情。

不要总是想着去找那些让自己赚到的工作&#xff0c;你自己心里清楚&#xff0c;自己有几斤几两&#xff0c;配什么样的公司。不要贪&#xff0c;不然最后原本该得到的都没有得到。你找差点的工作心里也踏实对不对&#xff0c;不会说比较慌&#xff0c;每天都过不安稳。不要幻想…

2019年数维杯数学建模A题 我国省际生态环境与经济交互状况的综合评价求解全过程文档及程序

2019年数维杯数学建模 A题 我国省际生态环境与经济交互状况的综合评价 原题再现&#xff1a; 改革开放以来&#xff0c;我国经济社会发展取得了举世瞩目的成就。经济的快速发展伴随着工业化和城镇化进程的快速推进。但在长期粗放式的发展模式下&#xff0c;生态脆弱性增加、生…

2022年朝阳地区新增一所IB世界学校

在2022年北京致知学校庆祝成立两周年之际&#xff0c;从IBO&#xff08;国际文凭组织&#xff09;官方传来好消息——北京致知学校获得IB PYP项目官方授权&#xff0c;正式成为一所IB世界学校。至此&#xff0c;中科致知国际教育集团旗下拥有了一所IB世界学校。据介绍&#xff…

【Java】记录一次使用 Springboot + Liquibase 做数据库的变更同步、回滚

文章目录准备工作初始化change_log编写change_log注意事项本次项目中Liquibase主要用来做以下工作&#xff1a;基于开发环境数据库&#xff0c;同步数据表结构至测试环境和线上环境数据库变更同步、回滚 官方地址&#xff1a;https://docs.liquibase.com/home.html 准备工作 …

10 大最佳网络分析工具介绍

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 本文列出了10大最受欢迎的…

什么是欧盟CE?为什么要做CE认证呢?

近年来, 在欧洲经济区(欧洲联盟、欧洲自由贸易协会成员国, 瑞士除外)市场上销售的商品中, CE标志的使用越来越多, 加贴CE标志的商品表示其符合安全、卫生、环保和消费者保护等一系列欧洲指令所要表达的要求。 字母CE代表什么意思&#xff1f; 在过去, 欧共体国家对进口和销售的…

壳聚糖-聚乙二醇-吲哚菁绿,Indocyaninegreen-PEG-Chitosan

壳聚糖-聚乙二醇-吲哚菁绿,Indocyaninegreen-PEG-Chitosan 中文名称&#xff1a;壳聚糖-吲哚菁绿 英文名称&#xff1a;Chitosan-Indocyaninegreen 别称&#xff1a;吲哚菁绿ICG修饰壳聚糖&#xff0c;ICG-壳聚糖 ICG是一种带负电荷的聚甲基菁染料&#xff0c;跟CY3&#x…

搭建 live2d api接口详细步骤

目录 前言 服务器方式教程 前置条件 搭建步骤 1. 将此项目上传至个人服务器 2. 配置 docker compose&#xff08;可选&#xff09; 3. nginx相关配置 4. 可能会遇到的问题 腾讯云 cos 图床方式搭建 前置条件 搭建步骤 1. 上传项目 2. 修改前端 api接口 ​编辑 3.…
最新文章