mybatis开发dao层时给sql传参与接收返回值注意点

2024-09-01 10:18

本文主要是介绍mybatis开发dao层时给sql传参与接收返回值注意点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      首先介绍一下:
            
       一.     使用映射方式时,传入Map,map里放了几个字段,还有一个list
            
            这时使用foreach时,
            注意:
            1、首先  传入的集合,collection后的命名和 Map里塞list时的
                key保持一致
            2、list是集合,不能进行 != "" 的校验,因为它不是String,类型不同
            
            3、如果Map里的list里放的是字符串,则 #{ groupCode} 里放的就是 和Item命名一致
            
            4、如果Map里的list里放的是map,则 #{ groupCode} 里放的就是 Item命名.key
               这个key和list里放的map的key保持一致
            
            讲完入参,将返回值
            
              如果要返回 List<Map<String,Object>>    ,
              写 resultType = "java.util.Map"     或者 resultMap = "resultMap"    
              特别说明:resultMap里和实体类相互对应,如果写resultMap,则返回的map里字段必须是对应关系里有的,且字段名一致
                        另外,之所以有resultMap ,也是因为mybatis封装在这个可以把返回的map转换为对应的实体类对象,
                        所以,如果不写List<Map<String,Object>>接收返回的list,也可以使用List<实体类名>来接收
                        
                        
                        
            二:传的如果是实体类对象,则 paramterType="对象实体类的引用"
            

            三:sql中 # 和 $ 的区别:  #可以防止sql注入
                    #是占位符,在DBMS才进行替换,在预编译时使用?占位,能防止sql注入;       

delete from user where name = ?;而传入的参数将会经过PreparedStatement方法的强制类型检查和安全检查等处理,最后作为一个合法的字符串传入。在#{}预处理之后可以预防SQL注入传入username 为 xiaoming‘or’1=1,使用#{},经过sql动态解析和预编译,会把单引号转义为 ’ 那么sql最终解析为:delete from user where name = "xiaoming\' or \'1=1 ";

 

 $是拼接符,在动态sql解析阶段将会进行变量替换,有可能会引发sql注入

${}这种方式只是简单的字符串替换,在动态SQL解析阶段将会进行变量替换,假如传递的参数为xiaoming,
最终处理结果如下:
delete from user where name = 'xiaoming' ;预编译之前就已经被替换,有被注入的风险。如果传入的为那么使用{} 处理后直接替换字符串的sql就解析为:
delete from user where name = 'a' or '1=1' ;

     这样整个表的数据就会被干掉引发生产事故

这篇关于mybatis开发dao层时给sql传参与接收返回值注意点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1126658

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Mysql DATETIME 毫秒坑的解决

《MysqlDATETIME毫秒坑的解决》本文主要介绍了MysqlDATETIME毫秒坑的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 今天写代码突发一个诡异的 bug,代码逻辑大概如下。1. 新增退款单记录boolean save = s

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本