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 方法一:将数据存储在map集合中,再将map集合存储在List集合中 5.2 方法二:将数据存储在map集合中 6、MyBatis中为Java中常用的…...

Spring循环依赖
一、Autowired依赖注入的缓存 二、Resource依赖注入过程 三、循环依赖 singletonObjects:缓存经过了完整生命周期的beanearlySingletonObjects:缓存未经过完整生命周期的bean,如果某个bean出现了循环依赖,就会提前把这个暂时未经过…...
docker以distribution和registry管理个人镜像仓库
目录 一.distribution 1.扩展源下载docker-distribution并启动 2.打标签并认证安全仓库 3.推送到私人仓库 4.拉取镜像 二.registry 1.拉取registry的镜像 2.运行容器并打标签 3.认证安全仓库 4.推送到私人仓库 5.拉取镜像 一.distribution 1.扩展源下载docker-dist…...

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

Android中的APK打包与安全
aapt2命令行实现apk打包 apk文件结构 classes.dex:Dex,即Android Dalvik执行文件 AndroidManifest.xml:工程中AndroidManifest.xml编译后得到的二进制xml文件 META-INF:主要保存各个资源文件的SHA1 hash值,用于校验…...
HTTPS单向认证与双向认证
HTTPS单向认证与双向认证 HTTPSCA证书单向认证双向认证 HTTPS Https就是HTTPSSL/TSL的简称。 SSL(Secure Socket Layer 安全套接层)是TCP/IP协议中基于HTTP之下TCP之上的一个可选协议层。 起初HTTP在传输数据时使用的是明文,传输过程中并不安全。网景(N…...
(七) ElasticSearch 分词器
1.分词器 分词器是 Elasticsearch 用于将文本拆分为单词(词项)的组件,以便于搜索和索引。以下是一些关于 Elasticsearch 分词器的常见问题和相关操作的介绍: 1)什么是分词器? 分词器是 Elasticsearch 中…...

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

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

【分布式技术专题】「OSS中间件系列」从0到1的介绍一下开源对象存储MinIO技术架构
MinIO背景介绍 MinIO创始者是Anand Babu Periasamy, Harshavardhana(戒日王)等人, Anand是GlusterFS的初始开发者、Gluster公司的创始人与CTO,Harshavardhana曾经是GlusterFS的开发人员,直到2011年红帽收购了Gluster公…...

生成式人工智能的潜在有害影响与未来之路(三)
产品责任法的潜在适用 背景和风险 产品责任是整个二十世纪发展起来的一个法律领域,旨在应对大规模生产的产品可能对社会造成的伤害。这一法律领域侧重于三个主要危害:设计缺陷的产品、制造缺陷的产品和营销缺陷的产品。产品责任法的特点有两个要素&…...

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

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

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

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

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

[系统] 电脑突然变卡 / 电脑突然** / 各种突发情况解决思路
今天来公司办公,开机之后发现电脑出现各种问题,死机、卡顿、点什么都加载,甚至开一个文件夹要1分钟才能打开,花了2个小时才解决,走了很多弯路,其实早点想通,5分钟就能解决问题,所以打…...

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

SpingMVC拦截器-异常处理的思路,用户体验不好的地方
1、异常处理机制 1.1 原先我们的异常都是手动的try..catch() 2、他存在着一些缺陷:这里创建了一个Demo的controller,内部有一个show方法: 3、访问内部,我要实现demoshow方法,我们来调用show1和show2的方法: 4、有一…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

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

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: 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 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

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