IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis中参数传递问题

第一章 Mybatis中参数传递问题

1.1 单个普通参数
  • 可以任意使用:参数数据类型、参数名称不用考虑
1.2 多个普通参数
  • Mybatis底层封装Map结构,封装key为param1、param2…【支持:arg0、arg1、…】
1.3 命名参数
  • 语法:

    • @Param(value=“参数名”)
    • @Param(“参数名”)
  • 位置:参数前面

  • 注意:

    • 底层封装Map结构
    • 命名参数,依然支持参数【param1,param2,…】
  • 示例代码

    /*** 通过员工姓名及薪资查询员工信息【命名参数】* @return*/
    public List<Employee> selectEmpByNamed(@Param("lName")String lastName,@Param("salary") double salary);
    
    <select id="selectEmpByNamed" resultType="employee">SELECTid,last_name,email,salaryFROMtbl_employeeWHERElast_name=#{param1}ANDsalary=#{param2}
    </select>
    
  • 源码分析

    • MapperMethod对象:142行代码【命名参数底层代码入口】

    • 命名参数底层封装map为ParamMap,ParamMap继承HashMap

    • ParamNameResolver对象:130行代码,命名参数底层实现逻辑

      //130行
      final Map<String, Object> param = new ParamMap<>();
      int i = 0;
      for (Map.Entry<Integer, String> entry : names.entrySet()) {param.put(entry.getValue(), args[entry.getKey()]);// add generic param names (param1, param2, ...)final String genericParamName = GENERIC_NAME_PREFIX + (i + 1);// ensure not to overwrite parameter named with @Paramif (!names.containsValue(genericParamName)) {param.put(genericParamName, args[entry.getKey()]);}i++;
      }
      return param;
      
1.4 POJO参数
  • Mybatis支持POJO【JavaBean】入参,参数key是POJO中属性
1.5 Map参数
  • Mybatis支持直接Map入参,map的key=参数key
1.6 Collection|List|Array等参数
  • 参数名:collection、list、array

第二章 Mybatis参数传递【#与$区别】

2.1 回顾JDBC
  • DriverManager
  • Connection
  • Statement:执行SQL语句,入参使用SQL【String】拼接方式
  • PreparedStatement执行SQL语句【预编译SQL】,入参使用占位符方式
  • ResultSet
2.2 #与$区别
  • 【#】底层执行SQL语句的对象,使用PreparedStatementd,预编译SQL,防止SQL注入安全隐患,相对比较安全。
  • 【$】底层执行SQL语句的对象使用Statement对象,未解决SQL注入安全隐患,相对不安全。
2.3 #与$使用场景

查询SQL:select col,col2 from table1 where col=? and col2=? group by ?, order by ? limit ?,?

  • #使用场景,sql占位符位置均可以使用#

  • KaTeX parse error: Expected 'EOF', got '#' at position 6: 使用场景,#̲解决不了的参数传递问题,均可以…处理【如:form 动态化表名】

    /*** 测试$使用场景*/
    public List<Employee> selectEmpByDynamitTable(@Param("tblName") String tblName);
    
    <select id="selectEmpByDynamitTable" resultType="employee">SELECTid,last_name,email,salaryFROM${tblName}
    </select>
    

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

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

相关文章

时间序列预测实战(二十五)PyTorch实现Seq2Seq进行多元和单元预测(附代码+数据集+完整解析)

一、本文介绍 本文给大家带来的时间序列模型是Seq2Seq&#xff0c;这个概念相信大家都不陌生了&#xff0c;网上的讲解已经满天飞了&#xff0c;但是本文给大家带来的是我在Seq2Seq思想上开发的一个模型和新的架构&#xff0c;架构前面的文章已经说过很多次了&#xff0c;其是…

MySQL数据库,函数与分组

单行函数&#xff1a; 操作数据对象 接受参数返回一个结果 只对一行进行变换 每行返回一个结果 可以嵌套 参数也可以是一列或一个值 数值函数 基本函数&#xff1a; 注&#xff1a;ROUND(x,y)函数的y是负数时&#xff0c;即往高位进行四舍五入&#xff0c;如-3就是按百位…

Python-函数详解(局部、全局变量)

函数:一段可以被重复利用的代码 函数定义&#xff1a; def 函数名 (参数) 函数体 return 返回值(可有可无) def 函数名()#函数参数#函数体return #返回值&#xff08;可有可无&#xff09; 函数的调用&#xff1a;先定义&#xff0c;后调用 警告和错误&#xff1a; …

出生率持续下降,而低代码,成了!

低代码这个概念在IT界应该是火了很久&#xff0c;在十年前就有低代码的概念。 在最初的时候&#xff0c;我们都是用高级语言或者脚本来开发页面或者应用&#xff0c;比如Java、C&#xff0c;前端会使用Vue、React等等。但是我们发现经常写的功能或者页面都是重复的&#xff0c;…

Python实现内网穿透和端口转发代理

对于大型的爬虫项目&#xff0c;肯定需要有良好的反爬机制&#xff0c;还应该配合代理iP使用&#xff0c;只有这两种结合才能让你的爬虫更高效准确。今天我就借用我一点空闲时间&#xff0c;来谈一谈有关python爬虫网络方面的解决方案&#xff0c;这里提供内网穿透和端口转发两…

分治法解决众数重数

问题 D: 22-数组-2-众数问题 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 128 MB 题目描述 问题描述&#xff1a; 给定含有n个元素的多重集合S&#xff0c;每个元素在S中出现的次数称为该元素的重数&#xff0c;其中重数最大的元素称为众数。 例如&#xff0c;S{1&a…

基于多波束和时间调制平均的相位量化栅瓣抑制方法极其性能极限

概要 为了抑制相位量化所导致的量化栅瓣,在波束合成中引入随机虚拟相移(RVPS,Random Virtual Phase Shift),采用多波束平均(MBS,Multi-beam Average)或时间调制平均(TMA,Time-Modulated Average)方法实现了对量化栅瓣的抑制,仿真验证了方法的有效性及限制,并进一…

印刷企业实施数字工厂管理系统有几个步骤

随着科技的飞速发展&#xff0c;许多传统行业正面临着前所未有的挑战。印刷行业也不例外&#xff0c;尤其在面对生产效率低下&#xff0c;资源浪费严重等问题时&#xff0c;数字工厂管理系统的实施成为了必然选择。那么&#xff0c;印刷企业实施数字工厂管理系统具体有几个步骤…

echarts 柱状图 定时自动轮播(非提示框轮播)

看了很多文档都是实现提示框轮播的&#xff0c;而我要实现的功能是&#xff1a;柱状图有多条数据时&#xff0c;轮播展示其中几条&#xff0c;比如我有100条数据&#xff0c;不能全部展示&#xff0c;设置轮播5条或者10条&#xff0c;依次显示数据&#xff0c;并形成闭环。 &a…

zabbix配置snmp trap--使用snmptrapd和Bash接收器--图文教程

1.前言 我的zabbix的版本是5.0版本&#xff0c;5.0的官方文档没有使用bash接收器的示例&#xff0c;6.0的官方文档有使用bash接收器的示例&#xff0c;但是&#xff0c;下载文件的链接失效&#xff1f;&#xff01; 这里讲解zabbix-server端配置和zabbix web端配置 2.zabbix-…

11、pytest断言预期异常

官方用例 # content of test_exception_zero.py import pytestdef test_zero_division():with pytest.raises(ZeroDivisionError):1/0# content of test_exception_runtimeerror.py import pytestdef test_recursion_depth():with pytest.raises(RuntimeError) as excinfo:def…

高效的单行python脚本

#-- coding: utf-8 -- “”" Created on Wed Dec 6 13:42:00 2023 author: czliu “”" 1. 平方列表推导 #使用列表推导法计算从 1 到 10 的数字平方 squares [x**2 for x in range(1, 11)] print(squares)2.求偶数 #可以使用列表推导式从列表中筛选偶数。还可以…

【Docker】 Docker attach 命令卡死的解决方案

在启动较早期的容器时&#xff0c;出现了使用 docker attach container_name 命令后卡死的问题。本文介绍了如何解决该问题。 首先&#xff0c;在使用 docker attach container_name 命令前需要先保证容器已经开启。此时&#xff0c;输入 docker attach container_name 命令后…

ncnn模型部署——使用VS2019把项目打包成DLL文件

一、项目打包成DLL文件 1.创建动态链接库DLL项目 创建完成&#xff0c;项目中包含源文件dllmain.cpp, pch.cpp&#xff0c;头文件framework.h, pch.h 2.编写和配置DLL项目 &#xff08;1&#xff09;配置pch.h文件&#xff0c;在头文件pch.h中定义宏&#xff0c;宏的作用的是…

【PyTorch】模型

文章目录 1. 模型的创建1.1. 创建方法1.1.1. 通过使用模型组件1.1.2. 通过继承nn.Module类 1.2. 将模型转移到GPU 2. 模型参数初始化3. 模型的保存与加载3.1. 只保存参数3.2. 保存模型和参数 1. 模型的创建 1.1. 创建方法 1.1.1. 通过使用模型组件 可以直接使用模型组件快速…

【Unity动画】Unity 2D动画创建流程

本文以2D为案例&#xff0c;讲解Unity 播放动画的流程 准备和导入2D动画资源 外部导入序列帧生成的 Unity内部制作的 外部导入的3D动画 2.创建动画过程 打开时间轴Ctrl6 选中场景中的一个未来需要播放动画的物体 回到时间轴点击Create一个新动画片段 拖动2D动画资源放入…

什么是SPA(Single Page Application)?它的优点和缺点是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

IT外包对中小企业的独特优势

在竞争激烈的商业环境中&#xff0c;企业的发展稍有缓慢&#xff0c;就很有可能被竞争对手快速赶超、趁机抢占市场。一些中小企业为了更好地应对市场变化和提高自身竞争力&#xff0c;越来越多地转向了IT外包服务。相较于大型企业&#xff0c;中小企业在选择IT外包时能够获得一…

数据结构实验任务七:基于广度优先搜索的六度空间理论验证

问题描述 “六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论 可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个&#xff0c;也就是 说&#xff0c;最多通过五个人你就能够认识任何一个陌生人。”假如给你一个社交网络图&#xf…

java中用thumbnailator依赖写一个压缩图片的类,只要图片大小超过几兆就无限循环下去的详细代码实例?(经典)

下面是使用Thumbnailator依赖编写的一个压缩图片的类。该类会不断循环压缩图片&#xff0c;直到图片大小小于指定的阈值&#xff08;以字节为单位&#xff09;。 java Copy code import net.coobird.thumbnailator.Thumbnails; import java.io.File; import java.io.IOExcept…