MYBATIS获取参数值

        MYBATIS最核心的莫过于动态的获取各种的参数值, 为了将来更好的使用MYBATIS进行开发, 我们必须先打好  "获取参数值"  这一基础

一. MYBATIS获取参数值的两种情况:

        1.${}

                实质:字符串的拼接

                注解:${}使用的字符串拼接的方式拼接SQL语句, 所以, 如果其中出现了字符串类型的数据, 就需要我们手动的为其加上相应的单引号, 并且使用这种方式还有可能会造成SQL注入的问题

        2.#{}

                实质:占位符赋值

                注解:使用这种方式获取参数值, 因为本身就是通过占位符获取对应的数据的, 所以在遇到字符串类型的数据的时候并不需要我们手动添加单引号, 其会自动的帮我们进行拼接, 并且不会造成SQL注入的情况

TIPS:

        SQL注入指的是输入某些特殊的值从而改变SQL语句的逻辑, 比如:

select * from table where username='${username}' and password='${password}'

        正常输入下, 只要用户名以及密码可以匹配到数据库中的数据就可以登录上, 但是如果在输入password的时候输入:

123 || 1=1

        在这种的情况下, 因为新加了逻辑符号 || 以及永远正确的 1 = 1 从而使得无论密码输入多少, 是否正确, 都会因为 || 以及1=1  的存在 使得其永远正确, 从而登录其中

二.获取参数值的五种情况

        1>:获取单个的参数值

        比如根据用户名称获取数据

    <select id="selectByName">select * from tb_user where username=#{username}</select>

        在这里, 我们使用# 通配符的形式获取, 但是, 里面的内容应该填什么呢?

        多次尝试过后, 我们发现无论输入什么, 经过测试得到的结果都是一样的, 所以#{}里面的内容可以是任意的值, 这是因为在读取的时候是无法读取到我们的属性值的, 在测试的SQL语句当中我们就发现了获取的是一个  ?   由此可见源代码当中是无法获取我们输入的值的,  但是最好还是需要有一些意义的值

同样的, 另一种字符串的方式内部的值也可以是任意的值, 依旧是选择有意义的值最好 , 记得需要我们手动添加 ' '

    <select id="selectByName">select * from tb_user where username='#{username}'</select>

        2>:获取多个参数值

        添加数据当中添加新的用户账号以及相应的密码

        如果跟第一种类似, 我们依旧输入有意义的值在占位符当中

    <insert id="addByNameAndPassword">insert into tb_user values(#{username},#{password})</insert>

        经过测试, 就会报错, 并且错误提示出现在了我们所输入的获取参数值的名称上

        这是因为在源代码当中, 我们获取这两个(多个)的参数的时候, 会自动的将其放在MAP集合当中, 我们必须根据对应的KEY来获取对应的VALUE才可以, 一般来讲, 默认的KEY按照顺序可以是[arg0, arg1....]或者是  [param1, param2] 都是按照顺序的

        在本案例当中, 第一个username就应当是 arg0 或者是param1这两种形式, password就是另外两种, 并且在获取的时候两者可以交叉联合使用, 不会产生任何的影响

<insert id="addByNameAndPassword">insert into tb_user values(#{arg0},#{arg1})</insert>//两者混和使用也是没有问题的, 但是需要注意不同的顺序对应的不同的值
<insert id="addByNameAndPassword">insert into tb_user values(#{arg0},#{param2})</insert>

                3>:使用MAP集合的形式获取

        在获取多个参数值的时候我们讲过, 实际上MABITS后台自动的帮我们设置了KEY值并且将数据传输了进去, 实际上我们也可以使用MAP的形式自己进行设置KEY值

       在映射文件设置对应参数的时候, 我们就不需要思考选择哪一种方式了, 可以直接使用我们自己定义的KEY值获取对应的数值

        在MAPPER当中

         在对应得测试类当中如下

        我们设置的KEY值如上, 设置了之后就可以在MAPPER得映射文件当中直接通过这些获取对应的值

                 4>:使用USER设置获取

        在添加数据得时候我们也可以选择使用向其中添加USER得方式获取对应的参数, 这里我们得参数获取得应当是对应的属性值

        在对应的映射文件当中添加如下 

    <insert id="addByUser">insert into tb_user values(#{username},#{password})
--         在这里我们需要明确一点, 属性值实际上指的是我们在对应的实体类对象User当中SET以及GET方法在去除两者之后将第一个字母变为小写之后得数值, 可以说成员变量一半是"属性值"</insert>

         最后在测试类编写对应的方法即可

        5>:使用注解Params的方式获取对应的参数

        使用注解的方式能够让我们自己手动的设置对应的MAP集合的KEY值, 从而不必再使用USER或者是其自带设置的KEY获取对应的参数值了, 在之后的开发当中, 我们也更加倾向使用这种防方式

        在MAPPER当中

        这这里, 我们所写的注解就相当于是我们自己设置了对应的KEY值, 在将其以MAP集合的形式保存后, 我们就可以使用这个注解获取对应的参数了

        在对应的MAPPER映射文件当中直接输入对应注解即可

        

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

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

相关文章

APP下载页前端自适应HTML源码

源码介绍 APP下载页前端自适应HTML源码&#xff0c;可以作为自己的软件介绍页或者app下载页&#xff0c;喜欢的朋友可以拿去研究 效果预览 HTML源码下载 https://www.qqmu.com/3026.html

Flink WordCount实践

目录 前提条件 基本准备 批处理API实现WordCount 流处理API实现WordCount 数据源是文件 数据源是socket文本流 打包 提交到集群运行 命令行提交作业 Web UI提交作业 上传代码到gitee 前提条件 Windows安装好jdk8、Maven3、IDEA Linux安装好Flink集群&#xff0c;可…

Java并发(1)--线程,进程,以及缓存

线程和进程是什么&#xff1f; 进程 进程是程序的一次执行过程&#xff0c;系统程序的基本单位。有自己的main方法&#xff0c;并且主要由主方法运行起来的基本上就是进程。 线程 线程与进程相似&#xff0c;但线程是一个比进程更小的执行单位。一个进程在其执行的过程中可以…

MVCC(解决MySql中的并发事务的隔离性)

MVCC 如何保证事务的隔离性&#xff1f; 1.排他锁&#xff1a;如一个事务获取了一个数据行的排他锁&#xff0c;其他事务就不能再获取改行的其他锁。 2.MVCC&#xff1a;多版本并发控制。 MVCC&#xff1a; 1.隐藏字段 1.DB_TRX_ID&#xff1a;最近修改事务的id。默认值从0开…

【MYSQL】索引机制概述

由于MySQL是作为存储层部署在业务系统的最后端&#xff0c;所有的业务数据最终都要入库落盘&#xff0c;但随着一个项目在线上运行的时间越来越久&#xff0c;数据库中的数据量自然会越来越多&#xff0c;而数据体积出现增长后&#xff0c;当需要从表查询一些数据时&#xff0c…

javaScript设计模式之简单工厂模式

简单工厂模式(Simple Factory):又叫静态工厂方法&#xff0c;由一个工厂对象决定创建某一种产品对象类的实例。主要用来创建同一类对象。 场景一 假设我们需要计算圆形和矩形的面积 function Circle(radius) {this.radius radius;}Circle.prototype.getArea function() {re…

总结SQL相对常用的几个字符函数

目录 字符的截取 substr() trim()、ltrim()、rtrim() 字符串的拼接 ||、 字符的大小写转换 upper(column_name):大写 lower(column_name):小写 字符替换 replace() 搜索字符 instr(column_name, substring_to_find,start,n_appearence) charindex(substring_to_fi…

【问题解决】ubuntu安装新版vscode报code-insiders相关错误

问题 目前 vscode官网 最新的包为 insiders_1.89.0-1712297812_amd64.deb &#xff0c;双击或者使用sudo dpkg -i code-insiders_1.89.0-1712297812_amd64.deb安装后报错&#xff0c;执行其他命令也报错。 安装环境&#xff1a;ubuntu18.04 dpkg: 处理软件包 code-insiders (…

火绒安全软件:程序员的网络守护天使

目录 前言 系统防护 网络防护 隐私保护 高级设置 软件安全 响应速度 持续更新 总结 前言 在这个充满机遇与挑战的数字时代&#xff0c;程序员们如同探险家&#xff0c;不断探索着代码的新大陆。然而&#xff0c;网络世界也充斥着各种未知的风险和威胁。火绒安全软件&a…

基于java+springboot+vue实现的药品管理系统(文末源码+Lw)23-297

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理&#xff0c;然而&#xff0c;随着近些年信息技术的迅猛发展&#xff0c;让许多比较老套的信息管理模式进行了更新迭代&#xff0c;药品信息因为其管理内容繁杂&#xff0c;管理数量繁多导致手工进行处理不能满足广…

llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署

文章目录 简介支持的模型列表2. 添加自定义数据集3. lora 微调4. 大模型 lora 权重&#xff0c;部署问题 参考资料 简介 llama-factory SFT系列教程 (一)&#xff0c;大模型 API 部署与使用本文为 llama-factory SFT系列教程的第二篇&#xff1b; 支持的模型列表 模型名模型…

Composer安装与配置

Composer&#xff0c;作为PHP的依赖管理工具&#xff0c;极大地简化了PHP项目中第三方库的安装、更新与管理过程。本文将详细介绍Composer的安装步骤、基本配置方法&#xff0c;以及一些实用的操作示例&#xff0c;帮助读者快速上手并熟练运用Composer。 一、Composer安装 环…

C++内存分布

C代码编译过程 预处理 宏定义展开、头文件展开、条件编译&#xff0c;这里并不会检查语法编译检查语法&#xff0c;将预处理后文件编译生成汇编文件汇编将汇编文件生成目标文件(二进制文件)链接将目标文件链接为可执行程序 进程的内存分布 程序运行起来(没有结束前)就是一个…

SQL Server 存储函数(funGetId):唯一ID

系统测试时批量生成模拟数据&#xff0c;通过存储函数生成唯一ID。 根据当前时间生成唯一ID&#xff08;17位&#xff09; --自定义函数&#xff1a;根据当前时间组合成一个唯一ID字符串:yearmonthdayhourminutesecondmillisecond drop function funGetId;go--自定义函数&…

2024年MathorCup数学建模B题甲骨文智能识别中原始拓片单字自动分割与识别研究解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 B题 甲骨文智能识别中原始拓片单字自动分割与识别研究 原题再现&#xff1a; 甲骨文是我国目前已知的最早成熟的文字系统&#xff0c;它是一种刻在龟甲或兽骨上的古老文字。甲骨文具有极其重要的研究价值&#xff0c;不仅对中国文…

2024年MathorCup数模竞赛C题详解

C题持续更新中 问题一问题二代码混合ARIMA-LSTM模型构建完整数据与代码第一问第二问 问题一 问题一要求对未来30天每天及每小时的货量进行预测。首先&#xff0c;利用混合ARIMA-LSTM模型进行时间序列预测。ARIMA模型擅长捕捉线性特征和趋势&#xff0c;而LSTM模型处理非线性关…

elementui中el-select下拉列表偏移问题

问题截图 解决方法 在el-select中添加:popper-append-to-body"false"即可 加完后的效果

Leetcode刷题之轮转数组

Leetcode刷题之轮转数组 一、题目描述二、题目解析方法一&#xff1a;三段逆置题目代码 方法二:利用memcpy进行拷贝运行结果 一、题目描述 轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums […

使用夜神模拟器进行android开发

1. 安装 进入 夜神模拟器官网 进行下载安装 2. 使用 找到夜神模拟器安装路径下的 bin 文件夹&#xff1a;C:\Program Files (x86)\Nox\bin 切换到 bin 目录之后&#xff0c;输入以下命令连接模拟器&#xff1a; nox_adb connect 127.0.0.1:62001 在启动 android 项目前&…

机器学习—数据集(二)

1可用数据集 公司内部 eg:百度 数据接口 花钱 数据集 学习阶段可用的数据集&#xff1a; sklearn:数据量小&#xff0c;方便学习kaggle&#xff1a;80万科学数据&#xff0c;真实数据&#xff0c;数据量大UCI&#xff1a;收录了360个数据集&#xff0c;覆盖科学、生活、经济等…