当前位置: 首页 > 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、有一…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...