当前位置: 首页 > news >正文

NO.04 MyBatis的各种查询功能

目录

1、查询一个实体类对象

2、查询一个List集合

3、查询单个数据

5、查询多条数据并存储在Map集合中

5.1 方法一:将数据存储在map集合中,再将map集合存储在List集合中

5.2 方法二:将数据存储在map集合中

6、MyBatis中为Java中常用的类型设置了类型别名


在之前的博客中介绍了MyBatis实现了数据库基本的增删改查,博客中使用的实体类为User类,相关内容可查看博客:NO.2 MyBatis框架:创建Mapper接口和映射文件,实现基本增删改查_qq_46053741的博客-CSDN博客

对于MyBatis的查询功能,都需要指明查询结果的返回类型,通常使用resultType和resultMap属性指定结果类型。接下来介绍MyBatis的各种查询功能。

1、查询一个实体类对象

 查询实体类对象,若参数为实体类的对象,则在查询语句中只需要使用${}和#{}访问实体类的属性名即可获得对应的属性值;若参数是Map集合,则在查询语句中使用${}和#{}访问Map集合的键即可获得对应的value值;若参数是一个字面量时,可以使用@Param注解的方式,通过${}和#{}访问形参获取形参的值。注意:使用${}获取属性值时,两边要加单引号,需要指定查询的结果返回类型

例如:

使用@Param注解的方式获取形参的值,在mapper接口中声明getUserByUsername方法,如下

    //根据用户名查询用户信息User getUserByUsername(@Param("username") String username);

在映射文件中实现Sql语句,使用resultType指明结果类型为User类型。

<!-- User getUserByUsername(@Param("username") String username)-->
<select id="getUserByUsername" resultType="User">select *from t_user where username=#{username}
</select>

2、查询一个List集合

查询多条数据时,不能使用实体类作为函数的返回值,要使用List集合作为方法的返回值,存储的类型为实体类类型(例如:List<User>),此时映射文件中查询结果类型为实体类型。

例如:

在Mapper接口中声明getAllUser方法,查询所有用户信息,将查询到的用户信息存储到List集合中返回。

//查询所用用户,并存储在List集合中
List<User> getAllUser();

在映射文件中实现Sql语句,使用resultType指定结果类型。

<!--    List<User> getAllUser();--><select id="getAllUser" resultType="User">select *from t_user</select>

3、查询单个数据

单个数据的查询主要用于查询数据的总条数,属于特殊值查询,此时resultType的结果类型指定为_integer。

例如:

在Maperr接口中声明getCount()方法。

    //获取总记录数int getCount();

在映射文件中实现Sql语句,resultType的结果类型为_integer。

<!--    int getCount();--><select id="getCount" resultType="_integer">select count(*) from t_user</select>

 4、查询一条数据为map集合

查询一条数据存储在Map集合中时,方法的返回值为Map,其中Map的键为String类型,值为Object类型。在映射文件中,结果类型指定为map类型。

例如:

在Mapper接口中声明getUserToMapByUsernameAndPassword(@Param("username") String username,@Param("password") String password)方法,将查询到的用户信息存储到Map集合中返回。

    //根据用户名和密码查询用户信息为map集合Map<String,Object> getUserToMapByUsernameAndPassword(@Param("username") String username,@Param("password") String password);

在映射文件中实现Sql语句,结果类型指定为map

<!--    Map<String,Object> getUserToMapByUsernameAndPassword(@Param("username") String username,@Param("password") String password);--><select id="getUserToMapByUsernameAndPassword" resultType="map">select *from t_user where username=#{username} and password=#{password}</select>

5、查询多条数据并存储在Map集合中

将多条数据存储在Map集合中有两种实现方式。方式一:将数据先存储在Map集合中,再将Map存储在List集合中输出。方式二:直接将数据存储在Map集合中输出。

5.1 方法一:将数据存储在map集合中,再将map集合存储在List集合中

将表中的数据以Map集合的方式查询,一条数据对应一个Map;若有多条数据,就会产生多个Map集合,此时将这些Map放在一个List集合中获取。

例如:

在Mapper接口中实现getAllUserByMapAndList()方法,方法的返回类型为List<Map<String ,Object>>.

    //方法一:List<Map<String,Object>> getAllUserByMapAndList();

在映射文件中实现Sql语句,resultType的结果类型为map

<!--    List<Map<String,Object>> getAllUserByMapAndList();--><select id="getAllUserByMapAndList" resultType="map">select *from t_user</select>

5.2 方法二:将数据存储在map集合中

将表中的数据以map集合的方式查询,一条数据对应一个map;若有多条数据,就会产生多个map集合,并且最终要以一个map的方式返回数据,此时需要通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合

例如:

在Mapper接口中声明getAllUserToMap()方法,用@MapKey注解该方法,使用用户的id作为Map集合的键,用户信息作为Map的值。

    //方法二@MapKey("id")Map<String,Object> getAllUserToMap();

在映射文件中实现Sql语句,resultType指定为map

<!--    Map<String,Object> getAllUserToMap();--><select id="getAllUserToMap" resultType="map">select *from t_user</select>

6、MyBatis中为Java中常用的类型设置了类型别名

对于实体类型resultType的结果类型通常指定为实体类类型,或在MyBatis的核心配置文件中通过typeAliases标签中的typeAlias标签的type属性指定实体类的路径,alias指定实体类的别名,或通过包设置类型别名,指定包下所有的类型将全部拥有默认的别名,即类名且不区分大小写(<package name="包的路径"/>)。

MyBatis自定义以下类的类型别名如下:

Integer:Integer,int

int:_int,_integer

Map:map

String:string

相关文章:

NO.04 MyBatis的各种查询功能

目录 1、查询一个实体类对象 2、查询一个List集合 3、查询单个数据 5、查询多条数据并存储在Map集合中 5.1 方法一&#xff1a;将数据存储在map集合中&#xff0c;再将map集合存储在List集合中 5.2 方法二&#xff1a;将数据存储在map集合中 6、MyBatis中为Java中常用的…...

Spring循环依赖

一、Autowired依赖注入的缓存 二、Resource依赖注入过程 三、循环依赖 singletonObjects&#xff1a;缓存经过了完整生命周期的beanearlySingletonObjects&#xff1a;缓存未经过完整生命周期的bean&#xff0c;如果某个bean出现了循环依赖&#xff0c;就会提前把这个暂时未经过…...

docker以distribution和registry管理个人镜像仓库

目录 一.distribution 1.扩展源下载docker-distribution并启动 2.打标签并认证安全仓库 3.推送到私人仓库 4.拉取镜像 二.registry 1.拉取registry的镜像 2.运行容器并打标签 3.认证安全仓库 4.推送到私人仓库 5.拉取镜像 一.distribution 1.扩展源下载docker-dist…...

2023京东酒类市场数据分析(京东数据开放平台)

根据鲸参谋平台的数据统计&#xff0c;今年7月份京东平台酒类环比集体下滑&#xff0c;接下来我们一起来看白酒、啤酒、葡萄酒的详情数据。 首先来看白酒市场。 鲸参谋数据显示&#xff0c;7月份京东平台白酒的销量为210万&#xff0c;环比下滑约49%&#xff1b;销售额将近19…...

Android中的APK打包与安全

aapt2命令行实现apk打包 apk文件结构 classes.dex&#xff1a;Dex&#xff0c;即Android Dalvik执行文件 AndroidManifest.xml&#xff1a;工程中AndroidManifest.xml编译后得到的二进制xml文件 META-INF&#xff1a;主要保存各个资源文件的SHA1 hash值&#xff0c;用于校验…...

HTTPS单向认证与双向认证

HTTPS单向认证与双向认证 HTTPSCA证书单向认证双向认证 HTTPS Https就是HTTPSSL/TSL的简称。 SSL(Secure Socket Layer 安全套接层)是TCP/IP协议中基于HTTP之下TCP之上的一个可选协议层。 起初HTTP在传输数据时使用的是明文&#xff0c;传输过程中并不安全。网景&#xff08;N…...

(七) ElasticSearch 分词器

1.分词器 分词器是 Elasticsearch 用于将文本拆分为单词&#xff08;词项&#xff09;的组件&#xff0c;以便于搜索和索引。以下是一些关于 Elasticsearch 分词器的常见问题和相关操作的介绍&#xff1a; 1&#xff09;什么是分词器&#xff1f; 分词器是 Elasticsearch 中…...

足球- EDA的历史数据分析并可视化

足球- EDA的历史数据分析并可视化 背景数据介绍探索数据时需要遵循的一些方向:数据处理导入库数据探索 数据可视化赛事分析主客场比分相关性分析时间序列分析 总结 背景 该数据集包括从1872年第一场正式比赛到2023年的44&#xff0c;341场国际足球比赛的结果。比赛范围从FIFA世…...

用正则处理Unicode 编码的文本

Unicode&#xff08;中文&#xff1a;万国码、国际码、统一码、单一码&#xff09;是计算机科学领域里的一项业界标准。它对世界上大部分的文字进行了整理、编码。Unicode 使计算机呈现和处理文字变得简单。 现在的 Unicode 字符分为 17 组编排&#xff0c;每组为一个平面&…...

【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构

MinIO背景介绍 MinIO创始者是Anand Babu Periasamy, Harshavardhana&#xff08;戒日王&#xff09;等人&#xff0c; Anand是GlusterFS的初始开发者、Gluster公司的创始人与CTO&#xff0c;Harshavardhana曾经是GlusterFS的开发人员&#xff0c;直到2011年红帽收购了Gluster公…...

生成式人工智能的潜在有害影响与未来之路(三)

产品责任法的潜在适用 背景和风险 产品责任是整个二十世纪发展起来的一个法律领域&#xff0c;旨在应对大规模生产的产品可能对社会造成的伤害。这一法律领域侧重于三个主要危害&#xff1a;设计缺陷的产品、制造缺陷的产品和营销缺陷的产品。产品责任法的特点有两个要素&…...

【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析

【2023钉钉杯复赛】A题 智能手机用户监测数据分析 Python代码分析 1 题目 一、问题背景 近年来&#xff0c;随着智能手机的产生&#xff0c;发展到爆炸式的普及增长&#xff0c;不仅推动了中 国智能手机市场的发展和扩大&#xff0c;还快速的促进手机软件的开发。近年中国智能…...

Django(5)-视图函数和模板渲染

Django 中的视图的概念是「一类具有相同功能和模板的网页的集合」 在我们的投票应用中&#xff0c;我们需要下列几个视图&#xff1a; 问题索引页——展示最近的几个投票问题。 问题详情页——展示某个投票的问题和不带结果的选项列表。 问题结果页——展示某个投票的结果。 投…...

Windows下 MySql通过拷贝data目录迁移数据库的方法

MySQL数据库的文件目录下图所示&#xff0c; 现举例说明通过COPY文件夹data下数据库文件&#xff0c;进行数据拷贝的步骤&#xff1b;源数据库运行在A服务器上&#xff0c;拷贝到B服务器&#xff0c;假定B服务器上MySQL数据库已经安装完成&#xff0c;为空数据库。 首先进入A服…...

RabbitMQ---订阅模型-Fanout

1、 订阅模型-Fanout Fanout&#xff0c;也称为广播。 流程图&#xff1a; 在广播模式下&#xff0c;消息发送流程是这样的&#xff1a; 1&#xff09; 可以有多个消费者 2&#xff09; 每个消费者有自己的queue&#xff08;队列&#xff09; 3&#xff09; 每个队列都要绑定…...

nginx 中新增url请求参数

1、nginx中新增配置&#xff1a; set $args "$args&参数名参数值"; 示例&#xff1a; set $args "$args&demo1cn_yaojin&demo2123123&myip$remote_addr"; location / {add_header Access-Control-Allow-Origin *;add_header Access-Contro…...

[系统] 电脑突然变卡 / 电脑突然** / 各种突发情况解决思路

今天来公司办公&#xff0c;开机之后发现电脑出现各种问题&#xff0c;死机、卡顿、点什么都加载&#xff0c;甚至开一个文件夹要1分钟才能打开&#xff0c;花了2个小时才解决&#xff0c;走了很多弯路&#xff0c;其实早点想通&#xff0c;5分钟就能解决问题&#xff0c;所以打…...

改进YOLO系列:8.添加SimAM注意力机制

添加SimAM注意力机制 1. SimAM注意力机制论文2. SimAM注意力机制原理3. SimAM注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. SimAM注意力机制论文 论文题目:SimAM: A Simple, Parameter-Free Attention Module for Convolutional Neural Network…...

Go与Rust的对比与分析

Rust 和 Go 是两种现代语言&#xff0c;近年来获得了巨大的关注&#xff0c;每种语言都有自己独特的优势和权衡。在这篇文章中&#xff0c;我们将深入探讨 Rust 和 Go 之间的差异&#xff0c;重点关注性能、语言功能和其他关键因素&#xff0c;以帮助您针对您的开发需求做出明智…...

SpingMVC拦截器-异常处理的思路,用户体验不好的地方

1、异常处理机制 1.1 原先我们的异常都是手动的try..catch() 2、他存在着一些缺陷&#xff1a;这里创建了一个Demo的controller,内部有一个show方法&#xff1a; 3、访问内部&#xff0c;我要实现demoshow方法&#xff0c;我们来调用show1和show2的方法&#xff1a; 4、有一…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...