热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mybatis关于传参数和一些关键字的心得

1.mybatis中的insert、update等关键字,和实际写的sql没有必然联系,无需特殊匹配。实际是以写的sql为准。例子如下:

1.mybatis中的insert、update等关键字,和实际写的sql没有必然联系,无需特殊匹配。实际是以写的sql为准。例子如下: 


        insert into tb_plat_kpi_value values('13',#{a},1,0)
   

 

自测验证通过的

 

2、@Param和不加这个注解的区别

void excute(@Param("aa") String sql);

那么sql要这么写

    insert into users values(1,#{aa});

 

void excute(String sql);

那么sql要这么写

    insert into users values(1,#{sql});

还有一种情况是,当传入的参数和实体类不一致是,可以使用这种。就是那个意思。

3.#{}和${}区别

#{}是含有占位符的,类似于Preparement的,可以防止sql注入

${}是不含注入,直接是传入字符串,进行sql拼装的,可能会发生sql注入。这个类似于Statement

在MyBatis的使用过程当中,使用参数进行sql拼装经常会使用到#{var}和${var}这两种参数的设置方式。 
两种情况在sql拼装的过程中都会使用的到,下面是两种方式的不用之处:

#{var}:

使用预编译的方式将参数设置到sql语句当中(相当于占位符 ?)
使用的是原生jdbc中的prepareStatrment
能够在一定程度上防止sql注入的风险(无法避免%的问题)
${var}

不适用预编译模式
去除相应的值直接拼装到sql语句当中
会有sql注入的安全问题
由上面的一些不同,所以我们在平时的大多数情况下都应该去使用#{var}进行参数值的获取。 
但是在一些原生jdbc不支持占位符的地方,我们就不能使用#{var}的形式去进行取值,这样会导致执行sql的时候报错

比如月表、年表,排序方式等特殊的情况,都需要我们使用${var}的形式直接取值进行字符串的拼接

select XXX from ${year}_${month}_XXX where id = XXX order by ${columnName} ${order}
1
一般情况下,能用#{var}的时候尽量使用#{var},不仅是因为它能够一定程度上保证安全,而且#{var}在使用方法上有更多的功能:

在使用#{var}的时候可以规定参数的一些规则: 
javaType、jdbcType(也可以使用mybatis中的ejdbcTypeForNull属性来指定)、mode(存储过程)、numericSale(小数位)、resultMap、typeHandler、jdbcTypeName
 

 


推荐阅读
  • spring(22)JdbcTemplate
    2019独角兽企业重金招聘Python工程师标准###1.导入jar包,必须jar包:c3p0、mysql-connector、beans、con ... [详细]
  • mysql数据库json类型数据,sql server json数据类型
    mysql数据库json类型数据,sql server json数据类型 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了PostgreSQL与MySQL在SQL语法上的主要区别,包括如何使用COALESCE替代IFNULL、金额格式化的方法、别名处理以及日期处理等关键点。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • java类名的作用_java下Class.forName的作用是什么,为什么要使用它?
    湖上湖返回与带有给定字符串名的类或接口相关联的Class对象。调用此方法等效于:Class.forName(className,true,currentLoader) ... [详细]
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
  • 本文介绍如何通过参数化查询来防止SQL注入攻击,确保数据库的安全性。示例代码展示了在C#中使用参数化查询添加学生信息的方法。 ... [详细]
  • 本文详细探讨了如何在PHP中有效防止SQL注入攻击,特别是在使用MySQL数据库时。文章通过具体示例和专业建议,帮助开发者理解和应用最佳实践。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 本文作为《WM平台上使用Sybase Anywhere 11》系列的第二篇,将继续探讨在Windows Mobile (WM) 系统中如何高效地操作Sybase Anywhere 11数据库。继上一篇关于安装与基本测试的文章之后,本篇将深入讲解数据库的具体操作方法。 ... [详细]
author-avatar
张逸紫惟雨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有