MYBATIS获取参数值

news2024/11/26 19:50:40

        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.coloradmin.cn/o/1590873.html

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

相关文章

23. 【Android教程】轮播滚动视图:ViewFlipper

轮播视图 ViewFlipper 是 Android 从第一个版本就开始提供的 UI 控件&#xff0c;它能够承载多个 View&#xff0c;但一个时机只会有一个 View 展示在屏幕上。通过 ViewFlipper 我们可以实现很多常见的带有展示类型的功能&#xff0c;类似 Gallery、轮播图、导航栏、广告banner…

基于Springboot+Vue的Java项目-旅游网站系统(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

C# WinForm —— 项目目录结构

1. WinForm 应用程序项目 Properties&#xff1a;属性文件夹存放了一个自动生成的类文件AssemblyInfo.cs&#xff0c;保存了一些应用程序集的一些信息引用存放了一些为应用程序提供所需的&#xff0c;某些功能的一些程序集&#xff08;dll文件&#xff09;等添加引用&#xff…

一些知识点小细节

当遇到的问题有关逆序输出&#xff0c;可以转换一下思想&#xff0c;就是使用for循环的时候&#xff0c;i的初始化是从数组或者是字符串的最后一个&#xff0c;然后注意设置循环结束的条件&#xff0c;最重要的是不要忘记i--;而不是I&#xff1b; 注意&#xff1a;当要逆序输出…

蚓链赋能企业拥有“数据能力”会带来哪些变革?

数字时代&#xff0c;对任何一家无论大小的企业&#xff0c;数据都是不可或缺的资源和工具。蚓链赋能企业拥有“数据能力”将会给企业带来哪些变革呢&#xff1f; 首先&#xff0c;将会提高企业的业务效率&#xff0c;通过数据分析和挖掘&#xff0c;企业可以更好地了解客户需…

Composer安装与配置

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

redis 数据迁移到rds2214(TongRDS-2.2.1.3.Load版 by lqw)

​ 文章目录 一.备份redis文件 vi redis.conf &#xff0c;看看有没有这两行设置&#xff0c;有的话改成跟下面的一致&#xff1a; appendonly yes appendfilename “appendonly.aof” 之后连接redis客户端&#xff0c;输入INFO persistence&#xff0c;如图所示即为开启成功…

中国历年GDP统计-探数API统计

数据介绍 时间维度&#xff1a;1978年-2021年 单位&#xff1a;亿元 该数据来源于国家统计局发布的中国统计年鉴2021&#xff0c;为按当年价格计算的中国历年GDP以及人均GDP。 数据说明&#xff1a; 数据来源于国家统计局。

SpringBoot-自定义Starter精华版

SpringBoot自定义Starter精华版 一、自定义 Starter 分析 项目首先加载 starter,starter加载自动配置类&#xff0c;然后再通过配置绑定对象读取配置属性&#xff0c;注册组件。 二、实现步骤 ​ 开发的自定义 Starter 需求是&#xff0c;项目依赖starterTest-spring-boot-s…

重生奇迹MU圣导师与弓箭手职业对比

职业定位对比 在职业定位上&#xff0c;弓箭手是一个远程物理输出职业&#xff0c;不过弓箭手也有一定的辅助能力&#xff0c;可以为队友提供控场效果&#xff0c;还能为队友提供一个攻击力加成BUFF。同时弓箭手也是一个非常需要操作的职业&#xff0c;想要玩好这个职业&#…

智能体Agent是AI时代普通人可参与的第一个红利机会

自从生成式 AI 兴起&#xff0c;掌握 prompt 能让 AI 工具更好为我们服务。而智能体的出现&#xff0c;让 AI 的使用门槛更是不断降低——都不用写 Prompt 了&#xff0c;直接用智能体就行了。 智能体Agent是AI时代普通人可参与的第一个红利机会© 由 ZAKER科技 提供 前几…

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

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

Go 自定义14位时间类型 yyyyMMddHHmmss

目录 功能 代码 功能 数据库或者接口时间类型&#xff0c;经常会使用14位的时间格式。每次都转换有点麻烦。可以自定义一个时间类型。 自定义类型需要实现json接口中的MarshalJSON与UnmarshalJSON两个函数&#xff0c;这样在做json编码解码时就会自动转为14位的时间格式了。…

【力扣】142. 环形链表 II

142. 环形链表 II 题目描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&am…

第6章:6.3.3 正则表达式的应用 (MATLAB入门课程)

讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 到目前为止&#xff0c;我们已经系统地介绍了正则表达式的基本语…

Bytebase 2.15.0 - GitOps 整体升级

&#x1f514; GitOps 整体升级 新版 GitOps 和之前版本不兼容&#xff0c;如果需要升级协助&#xff0c;请联系我们。 使用访问令牌进行身份验证。支持项目中配置多个 VCS 连接器。支持在 VCS 连接器中指定数据库分组为目标&#xff08;默认情况下应用于项目中的所有数据库&…

uni-app实现下拉刷新

业务逻辑如下&#xff1a; 1.在滚动容器中加入refresher-enabled属性&#xff0c;表示为开启下拉刷新 2.监听事件&#xff0c;添加refresherrefresh事件 3.在事件监听函数中加载数据 4.关闭动画&#xff0c;添加refresher-triggered属性&#xff0c;在数据请求前开启刷新动画…

自营商城上货采集,上货软件采集(淘宝1688)接口

自营商城上货采集及上货软件采集涉及到淘宝和1688等平台的接口时&#xff0c;主要流程包括确定数据源、申请API权限、编写自动化采集脚本以及后续的数据处理和商城上货。 taobao.item_get-获取淘宝商品数据接口返回值说明 1.请求方式&#xff1a;HTTP POST GET &#xff08;复…

信息学奥赛一本通T1441-生日蛋糕【dfs】

信息学奥赛一本通T1441-生日蛋糕 - C语言网 (dotcpp.com) #include <iostream> #include <algorithm> #include <cmath> using namespace std; const int N1e5100; int n,m; int res1e9; void dfs(int spv,int cnt,int r,int h,int sarea) //spv:剩余的体积&…

【电控笔记0】拉式转换与转移函数

概要 laplace&#xff1a;单输入单输出&#xff0c;线性系统 laplace 传递函数 总结