MYBATIS获取参数值

简介: 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映射文件当中直接输入对应注解即可


相关文章
|
6月前
|
SQL Java 数据库连接
初识MyBatis(搭建MyBatis、简单增删改查、核心配置文件讲解及获取参数值)
初识MyBatis(搭建MyBatis、简单增删改查、核心配置文件讲解及获取参数值)
108 0
|
6月前
|
SQL Java 数据库连接
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
728 0
MyBatis【源码探究 01】mapper.xml文件内<if test>标签判断参数值不等于null和空(当参数值为0)时筛选条件失效原因分析
|
6月前
|
SQL Java 数据库连接
Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式
【1月更文挑战第3天】 一、核心配置文件详解 二、默认的类型别名 三、MyBatis的增删改查 四、MyBatis获取参数值的两种方式 1、单个字面量类型的参数 2、多个字面量类型的参数 3、map集合类型的参数 4、实体类类型的参数 5、使用@Param标识参数
99 2
Mybatis之核心配置文件详解、默认类型别名、Mybatis获取参数值的两种方式
|
3天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
存储 Java 数据库连接
MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式
78 0
|
SQL Java 数据库连接
【Mybatis】常见面试题:Mybatis获取参数值的两种方式?
【Mybatis】常见面试题:Mybatis获取参数值的两种方式?
|
SQL Java 数据库连接
【Mybatis】常见面试题:Mybatis获取参数值的两种方式?
【Mybatis】常见面试题:Mybatis获取参数值的两种方式?
|
SQL Java 数据库连接
五、MyBatis获取参数值的两种方式以及传参情况
${}的本质就是字符串拼接,#{}的本质就是占位符赋值。
262 0
五、MyBatis获取参数值的两种方式以及传参情况
|
SQL Java 数据库连接
MyBatis获取参数值的两种方式:#{} 与 ${}
#{}的本质是占位符赋值,${}的本质是字符串拼接
129 0
|
SQL Java 数据库连接
MyBatis获取参数值的两种方式
MyBatis获取参数值的两种方式