JavaEE简单示例——<select>中的查询参数传递和结果集封装自动映射关系

news/2024/4/27 6:44:06/文章来源:https://blog.csdn.net/hssjsh/article/details/129168491

简单介绍:

在之前我们在讲SQL映射文件中的映射查询语句的<select>标签的时候,对其中的四个常用属性的讲解并不是那么的透彻,今天就来详细的解释<select>的四个常用属性的具体含义以及<select>标签在进行查询的时候查询参数是如何传递的,以及查询出结果后是如何自动映射的。

使用方法:

<select id="SQL语句的唯一标识" resultType="传入参数类型" parameterType="结果集封装实体类">

        select * from user where id = #{id}

</select>

我们对上面的每一个属性进行比较详细的讲解:

id:

在同一个命名空间下,这条SQL语句的唯一标识。在同一命名空间下,这个值不能重复,但是在不同的命名空间下,这个值是可以重复的。命名空间的概念就相当于Java中的类名,而id的值就相当于是类名,通过包名+类名的方式可以在所有文件中精确定位一条唯一的SQL映射语句

resultType:

翻译过来就是结果类型。表示当这条SQL语句查询完成之后返回的结果将要封装到哪一个POJP实体类中,如果之前配置过别名映射,这个地方填的就是POJO类的短别名,如果没有配置别名映射,这个地方填的就是POJO类的全限定类名。全限定类名就是包名+类名的方式定位唯一的类。

parameterType:

翻译过来就是参数类型。在我们的查询语句中会有一些参数是外部引用的,也就是使用#{}的方式,在花括号里面会有一些从外部引用的参数,这种#{}的写法在XML文件中表示引用外部的变量,而这个变量的来源就是取自于parameterType的值。

代码实现:

首先,我们就来实现一个非常简单的,根据id查询相应的数据,我们这次不使用接口化开发,而是使用最原本的MyBatis给我们提供的API来完成查询的动作:

 

 

可以看到,只要我们正确的配置SQL映射文件和MyBatis核心配置文件的<mappers>属性,以及在查询的时候正确的使用命名空间.唯一标识的方式正确的引用SQL语句,以及传递正确的参数,就能正确的查询出想要的结果,而我们这次讨论的问题在于两个。

1.我们的参数经历了什么?

2.他是怎么做到把MySQL的数据表信息和Java中的类映射到一起的。

文字讲解:

首先就是我们传递的参数经历了什么?

在我们编写SQL映射语句的时候,parameterType属性值对应的是我们的参数类型,上面我们写的是Int类型,也就是数字整形,那么这个参数从哪里来?

它来自于这里,也就是我们的查询方法的第二个参数,我们回想一下对于查询方法的参数介绍。第一个参数表示SQL映射语句的唯一标识,第二个参数就是我们在查询的时候会使用到的参数。所以这个参数的类型就是我们parameter的值,具体的值就是我们在调用方法的时候传进去的值,传进去之后它去了哪了呢?

去了这里。之前我们说狗,#{}这种写法表示引用外部的数据,这个外部的数据就是我们传递的参数,如果这个参数的类型和我们预设的数据类型不符合,也就是我们传入的参数的数据类型和我们在parameterType的值不同,就会报错,比如我们传入一个String类型:

他就会非常贴心的提醒我们,String类型不能被转换成Integer类型,就说明这是我们参数传递时候的类型错误。

在正常的传递进来之后,这个SQL语句就算是完整了,然后就可以开始查询,并最终会出现一个查询结果,然后就来到了我们的第二个问题。

MySQL中的表数据是怎么映射到我们的Java实体类的? 

这个问题也非常的简单,之前我们说过。resultType的值就是用来帮助我们自动映射MySQL表数据和Java实体类的,而要完成自动映射的也是有条件的,那就是要求我们数据库表的列名和Java实体类的属性名要完全一致,并且数据类型也要一直,其中Java中的String类型对应MySQL中的varchar类型:

 

只有满足了这两个条件,并且将resultType的值设置为对应的Java实体类的之后才可以完成自动映射。如果这时候我改变一下数据类型,我们将Java实体类中的name的值改为int类型:

 

这时候再来进行查询,就会出现下面的效果:

他会告诉我们无法从字符串”张三“确定数据类型。这个张三是我们数据库的name字段的值,但是根据我们配置的自动映射规则,Java实体类student的name属性字段是int类型,而"张三”是字符串类型,两者类型并不匹配,所以会导致类型无法匹配的错误。

所以,我们可以画一张图来最终演示一下这一整个的过程:

 图画的略微有一些抽象,但是我觉得问题不大,能理解就好

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_72722.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sofa-jraft的Rpc调用服务端分析

在sofa-jraft中&#xff0c;关于RPC的服务端是RpcServer在RpcServer中的init方法中&#xff1a;初始化了连接事件监听器&#xff0c;这个里面就是一个map&#xff0c;然后可以添加事件监听的处理器&#xff0c;初始化userProcessors, codec 是一个编码和解码器的工厂&#xff0…

2022-2023年营销报告(B站平台) | 5大行业势态、流量大盘全景洞察

一直以来&#xff0c;手持高活跃、高粘性用户群体的B站是行业用来观察年轻人消费习惯的重要平台。以至于用户群体的不断壮大带动了B站的商业价值。如今B站的商业舞台越来越大&#xff0c;不断地向外界招手&#xff0c;欢迎更多品牌积极加入到这个千万年轻人聚集的内容社区。为了…

基于Hibernate对数据库表的单表查询

基于Hibernate对数据库表的单表查询 1.依赖 1.1jar包 1.2配置文件。persistence.xml <?xml version"1.0" encoding"UTF-8"?> <persistence version"2.1"xmlns"http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi"…

亲身试验 Outlook防关联方法分享

Outlook在海外的用途是很广泛的&#xff0c;不仅可以用于收发邮件&#xff0c;还可以作为各类第三方网站的登录凭证。所以Microsoft对于Outlook的监管还是比较严格的&#xff0c;跨境卖家大量注册Outlook账号使用的话很容易被检测出关联然后被封号。龙哥针对Outlook防关联的问题…

【Kubernetes 入门实战课】Day02——初识容器

系列文章目录 【Kubernetes 入门实战课】Day01——搭建kubernetes实验环境(一) 文章目录系列文章目录前言一、Docker的诞生二、Docker的形态1、Docker Desktop2、Docker Engine二、Docker的安装1、服务器连接外网安装2、服务器不通外网三、Docker的使用三、Docker的架构总结前…

阿里云物联网平台设备模拟器

在使用阿里云物联网平台过程中&#xff0c;如果开始调试没有实际的物理设备&#xff0c;可以考虑在阿里云物联网平台使用官方自带的模拟器进行调试。不过也可以通过叶帆科技开发的阿里云物联网平台设备模拟器AliIoTSimulator进行调试&#xff0c;AliIoTSimulator可以独立运行&a…

stm32 VM8978 音乐播放

一、WAV文件 1、WAV文件简介 2、WAV文件的解析 二、WM8978 1、WM8978介绍 2、WM8978特点 3、WM8978接口 4、WM8978框架 5、 WM8978 寄存器 三、IIS详解 1、IIS介绍 2、 IIS 的特点 3、IIS框架 4、 音频协议 5、 IIS Philips 标准 6、 IIS 时钟 四、音乐播放硬件…

ChatGPT三个关键技术

情景学习&#xff08;In-context learning&#xff09; 对于一些LLM没有见过的新任务&#xff0c;只需要设计一些任务的语言描述&#xff0c;并给出几个任务实例&#xff0c;作为模型的输入&#xff0c;即可让模型从给定的情景中学习新任务并给出满意的回答结果。这种训练方式能…

双检测人脸防伪识别方法(活体检测+人脸识别+关键点检测+人像分割)

双检测人脸防伪识别=人脸检测+活体检测+人脸识别 1.人脸关键点+语义分割 使用mediapipe进行视频人脸关键点检测和人像分割: import time import cv2 import mediapipe as mp import numpy as npmp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solution…

量化交易-单因子分析-alphalens

1. 数据准备 1.1 计算因子IC重要函数 def get_clean_factor_and_forward_returns(factor,prices,groupbyNone,binning_by_groupFalse,quantiles5,binsNone,periods(1, 5, 10),filter_zscore20,groupby_labelsNone,max_loss0.35,zero_awareFalse,cumulative_returnsTrue)facto…

【C语言】-程序编译的环境和预处理详解-让你轻松理解程序是怎么运行的!!

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; 程序的编译前言一、 程序的翻译环境和执行环境二、 详解翻译环境2.1编译环境2.1.1预编…

民锋国际期货:2023,既艰难又充满希望,既纷乱又有无数机会。

不管是官方还是民间&#xff0c;各种信号都表明&#xff0c;2023年是一个拼经济的年份。 通货膨胀带来的需求量的增加&#xff0c;与中国经济高速发展带来的供给量增加&#xff0c;二者共同构成了我们的物价。 做一个长期主义者&#xff0c;做一个坚定看好中国未来的人&#…

MapBox动态气泡图渲染教程

先来看效果: 视频效果: 屏幕录制2023-02-22 15.34.57 首先我们来介绍一下思路。对于mapbox和openlayers这样的框架来讲,气泡图中的气泡本质上就是一个div,就是将一个dom元素追加到canvas上的固定位置而已。 在mapbox中有marker的概念,官网也有示例: Attach a popup to …

二叉树——路径总和

路径总和 链接 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点…

数据库及缓存之MySQL(一)

思维导图 常见知识点 1.mysql存储引擎&#xff1a; 2.innodb与myisam区别&#xff1a; 3.表设计字段选择&#xff1a; 4.mysql的varchar(M)最多存储数据&#xff1a; 5.事务基本特性&#xff1a; 6.事务并发引发问题&#xff1a; 7.mysql索引&#xff1a; 8.三星索引&#xf…

升职加薪必备,2023年程序员不能不知道的AI辅助编码工具

已经有很多人把chatGPT当做必备的Bug修复工具了&#xff0c;对于用AI写代码&#xff0c;有人感到失落&#xff0c;害怕被取代&#xff0c;而另一些人则认为人工智能将加快编写更好代码的过程。 尽管 AI 编写的代码并非完美无缺&#xff0c;但我相信&#xff0c;最终AI将取代人…

车机开发—【CarService启动流程】

汽车架构&#xff1a;车载HAL是汽车与车辆网络服务之间的接口定义&#xff08;同时保护传入的数据&#xff09;&#xff1a; 车载HAL与Android Automotive架构&#xff1a; Car App&#xff1a;包括OEM和第三方开发的AppCar API&#xff1a;内有包含CarSensorManager在内的AP…

Hadoop集群模式安装(Cluster mode)

1、Hadoop源码编译 安装包、源码包下载地址 Index of /dist/hadoop/common/hadoop-3.3.0为什么要重新编译Hadoop源码? 匹配不同操作系统本地库环境&#xff0c;Hadoop某些操作比如压缩、IO需要调用系统本地库&#xff08;*.so|*.dll&#xff09; 修改源码、重构源码 如何…

H12-831题库(有详细的解析)

1.&#xff08;单选&#xff09;某工程师利用2台路由器进行IPv6业务测试,通过运行BGP4模拟总部与分支的互联互通。如图所示,某工程师抓包查看R1发出的update报文。关于该报文信息的描述,以下哪个说法是正确的? A.该报文描述的路由的下一跳地址为:2001:db8::2345:1::1 B.该报文…

自动增长配置不合理导致的性能抖动

背景客户收到了SQL专家云告警邮件&#xff0c;在凌晨2点到3点之间带有资源等待的会话数暴增&#xff0c;请我们协助分析。现象登录SQL专家云&#xff0c;进入活动会话的趋势分析页面&#xff0c;下钻到2点钟一个小时内的数据&#xff0c;看到每分钟的等待数都在100左右&#xf…