SpringBoot中Mapper.xml的入参方式
在SpringBoot开发过程中,我们使用 ***Mapper.xml
+***Mapper.java
来封装对数据库表的 CURD
操作,正常每张表会有一组对应的文件。
一、Mapper常见用法
下面例举一个查询操作:
- 数据表
t_sap_customer
,表中有字段id、code、name、create_time、update_time、last_ver、is_valid
- 现在需要根据
id
、is_valid
来查询一条数据
TSapCustomerMapper.java 代码:
package com.starcharge.repository.db1.product.mapper;import com.starcharge.repository.db1.product.domain.TSapCustomerDO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;@Repository
public interface TSapCustomerMapper {TSapCustomerDO detail(String id,String isValid);
}
TSapCustomerMapper.xml 代码:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.abc.repository.db1.product.mapper.TSapCustomerMapper"><!-- 创建数据库与实体类字段对应关系 --><resultMap id="BaseResultMap" type="com.abc.repository.db1.product.domain.TSapCustomerDO"><result property="id" column="id"/><result property="name" column="name" jdbcType="VARCHAR"/><result property="createTime" column="create_time" jdbcType="VARCHAR"/><result property="updateTime" column="update_time" jdbcType="VARCHAR"/><result property="lastVer" column="last_ver" jdbcType="VARCHAR"/><result property="isValid" column="is_valid" jdbcType="VARCHAR"/></resultMap><!--查询列表--><select id="detail" resultMap="BaseResultMap">selectid,code,name,last_ver,is_valid,create_time,update_timefrom t_sap_customerwhere is_valid = #{isValid} and id = #{id}</select>
</mapper>
上面TSapCustomerMapper.java
和TSapCustomerMapper.xml
就是一组针对数据库表t_sap_customer
的实体类操作,*Mapper.java
负责定义实体类的对外Api,*Mapper.xml
负责实现具体的CURD
操作的SQL语句。
两者使用xml文件中的id
属性值来做映射对应,具体来说就是TSapCustomerMapper
接口中的detail
方法,会到xml
文件中找到对应的id='detail'
来执行。
二、mapper.xml入参方法
这里常见的一个问题是,我们在执行SQL
的时候会有各种入参,那么我们要如何将api
中的入参传入xml
文件中,请看下面介绍。
1、简单传参
TSapCustomerMapper.java
和TSapCustomerMapper.xml
之间,默认按照参数名入参。
以下的入参都是可以正常运行的:
//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {TSapCustomerDO detail(String id, String isValid);
}//TSapCustomerMapper.xml<select id="detail" resultMap="BaseResultMap">selectid,code,name,last_ver,is_valid,create_time,update_timefrom t_sap_customerwhere is_valid = #{isValid} and id = #{id}</select>
2、@Param传参
//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {TSapCustomerDO detail(@Param("id1") String id, @Param("isValid1") String isValid);
}//TSapCustomerMapper.xml<select id="detail" resultMap="BaseResultMap">selectid,code,name,last_ver,is_valid,create_time,update_timefrom t_sap_customerwhere is_valid = #{isValid1} and id = #{id1}</select>
3、Map入参
//SapCustomerImpl.java
@Service
public class SapCustomerImpl implements SapCustomerService { @Overridepublic TSapCustomerDO detail(String id) {HashMap<String,String> map=new HashMap<String,String>();map.put("id",id);map.put("isValid","2");TSapCustomerDO r = sapCustomerMapper.detail(map);return r;}
}//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {TSapCustomerDO detail(HashMap query);
}//TSapCustomerMapper.xml<select id="detail" resultMap="BaseResultMap">selectid,code,name,last_ver,is_valid,create_time,update_timefrom t_sap_customerwhere is_valid = #{isValid} and id = #{id}</select>
4、param、arg入参
xml文件中默认会传入arg0...argN
、param1...paramN
两个使用索引的入参。arg
从0开始,param
从1开始。
//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {TSapCustomerDO detail(String id, String isValid);
}//TSapCustomerMapper.xml<select id="detail" resultMap="BaseResultMap">selectid,code,name,last_ver,is_valid,create_time,update_timefrom t_sap_customerwhere is_valid = #{param2} and id = #{param1}</select>
5、简单入参+Map入参
//SapCustomerImpl.java
@Service
public class SapCustomerImpl implements SapCustomerService { @Overridepublic TSapCustomerDO detail(String id) {HashMap<String,String> map=new HashMap<String,String>();map.put("isValid","2");TSapCustomerDO r = sapCustomerMapper.detail(id, map);return r;}
}//TSapCustomerMapper.java
@Repository
public interface TSapCustomerMapper {TSapCustomerDO detail(String id, HashMap map);
}//TSapCustomerMapper.xml<select id="detail" resultMap="BaseResultMap">selectid,code,name,last_ver,is_valid,create_time,update_timefrom t_sap_customerwhere is_valid = #{map.isValid} and id = #{id}</select>
三、#{} 和 ${} 的区别
MyBatis中 #{ }和${ }都可以用来动态传递参数。
1、不同点
#{}
对应底层使用 jdbc
的PreparedStatementd
对象来执行sql语句,在SQL中相当于一个参数占位符“?”,用来补全预编译语句。它补全预编译语句时,可以理解为在此参数值两端统统使用单引号引起来。 #{}
里除了可以写接收参数的名称外,还可以设置javaType
,jdbcType
,mode
等。
${}
对应底层使用 jdbc
的Statement
对象来执行sql
语句,就是单纯的字符串拼接,拼接完成后才会对SQL
进行编译、执行,所以性能较低,也无法复用。但是在有些 #{ }
无法胜任的地方,还是会需要${ }
来完成。
2、结论
#{}
很大程度防止sql
注入,提高系统安全,一般能用#
的地方就别用$
。
${}
无法防止Sql
注入,如果写的SQL
语句的参数内容应该作为SQL
的一部分,此时必须使用$
,比如:表名称,order by
排序字段,分组 group by
等。
相关文章:
SpringBoot中Mapper.xml的入参方式
在SpringBoot开发过程中,我们使用 ***Mapper.xml***Mapper.java 来封装对数据库表的 CURD 操作,正常每张表会有一组对应的文件。 一、Mapper常见用法 下面例举一个查询操作: 数据表t_sap_customer,表中有字段id、code、name、c…...
回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现WOA-RBF鲸鱼优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图&#…...
浅析Python爬虫ip程序延迟和吞吐量影响因素
作为一名资深的爬虫程序员,今天我们很有必要来聊聊Python爬虫ip程序的延迟和吞吐量,这是影响我们爬取效率的重要因素。这里我们会提供一些实用的解决方案,让你的爬虫程序飞起来! 网络延迟 首先,让我们来看看网络延迟对…...
【100天精通python】Day43:python网络爬虫开发_爬虫基础(urlib库、Beautiful Soup库、使用代理+实战代码)
目录 1 urlib 库 2 Beautiful Soup库 3 使用代理 3.1 代理种类 HTTP、HTTPS 和 SOCKS5 3.2 使用 urllib 和 requests 库使用代理 3.3 案例:自建代理池 4 实战 提取视频信息并进行分析 1 urlib 库 urllib 是 Python 内置的标准库,用于处理URL、发送…...
Linux:安全技术与防火墙
目录 一、安全技术 1.安全技术 2.防火墙的分类 3.防水墙 4.netfilter/iptables关系 二、防火墙 1、iptables四表五链 2、黑白名单 3.iptables命令 3.1查看filter表所有链 iptables -L 编辑3.2用数字形式(fliter)表所有链 查看输出结果 iptables -nL 3.3 清空所有链…...
Confluent kafka 异常退出rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack
rd_tmpabuf_alloc0: rd kafka topic info_new_with_rack 根据网上的例子,做了一个测试程序。 C# 操作Kafka_c# kafka_Riven Chen的博客-CSDN博客 但是执行下面一行时,弹出上面的异常,闪退。 consumer.Subscribe(queueName) 解决方案&…...
最新ChatGPT网站程序源码+AI系统+详细图文搭建教程/支持GPT4.0/AI绘画/H5端/Prompt知识库
一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!…...
chatGPT-对话柏拉图
引言: 古希腊哲学家柏拉图,在他的众多著作中,尤以《理想国》为人所熟知。在这部杰作中,他勾勒了一个理想的政治制度,提出了各种政体,并阐述了他对于公正、智慧以及政治稳定的哲学观点。然而,其…...
Java项目-苍穹外卖-Day04
公共字段自动填充 这些字段在每张表基本都有,手动进行填充效率低,且后期维护更改繁琐 使用到注解AOP主要 先答应一个AutoFill注解 再定义一个切面类进行通知 对应代码 用到了枚举类和反射 package com.sky.aspect; /*** 自定义切面类,…...
SQL递归获取完整的树形结构数据
在 SQL 中,WITH RECURSIVE 用于创建递归查询,它允许在查询中引用自身。这种查询通常用于处理具有层次结构的数据,例如树形结构。 以下是使用 WITH RECURSIVE 创建递归查询的一般语法: WITH RECURSIVE [alias] ([column1], [colu…...
如何使用营销活动,提升小程序用户的参与度
在当今数字化时代,小程序已成为企业私域营销的重要一环。然而,仅仅拥有小程序还不足以吸引用户的兴趣和参与。营销活动作为推动用户参与的有效手段,可以在激烈的市场竞争中脱颖而出。本文将深入探讨如何使用营销活动,提升小程序用…...
IDEA中使用Docker插件构建镜像并推送至私服Harbor
一、开启Docker服务器的远程访问 1.1 开启2375远程访问 默认的dokcer是不支持远程访问的,需要加点配置,开启Docker的远程访问 # 首先查看docker配置文件所在位置 systemctl status docker# 会输出如下内容: ● docker.service - Docker Ap…...
第7章 高性能门户首页构建
mini商城第7章 高性能门户首页构建 一、课题 高性能门户建设 二、回顾 1、了解文件存储系统的概念 2、了解常用文件服务器的区别 3、掌握Minio的应用 三、目标 1、OpenResty 百万并发站点架构 OpenResty 特性介绍 搭建OpenResty Web站点动静分离方案剖析 2、多级缓存架…...
用加持了大模型的 Byzer-Notebook 做数据分析是什么体验
Byzer-Notebook 是专门为 SQL 而研发的一款 Web Notebook。他的第一公民是 SQL,而 Jupyter 则是是以 Python 为第一公民的。 随着 Byzer 引擎对大模型能力的支持日渐完善, Byzer-Notebook 也在不自觉中变得更加强大。我和小伙伴在聊天的过程中才发现他已…...
学习设计模式之观察者模式,但是宝可梦
前言 作者在准备秋招中,学习设计模式,做点小笔记,用宝可梦为场景举例,有错误欢迎指出。 观察者模式 观察者模式定义了一种一对多的依赖关系,一个对象的状态改变,其他所有依赖者都会接收相应的通知。 所…...
课程项目设计--spring security--用户管理功能--宿舍管理系统--springboot后端
写在前面: 还要实习,每次时间好少呀,进度会比较慢一点 本文主要实现是用户管理相关功能。 前文项目建立 文章目录 验证码功能验证码配置验证码生成工具类添加依赖功能测试编写controller接口启动项目 security配置拦截器配置验证码拦截器 …...
学习设计模式之装饰器模式,但是宝可梦
装饰模式 为了不改变组件的结构,动态地扩展其功能。 通常,扩展功能通过子类进行,但是继承的方式具有静态特征,耦合度高。 意图:动态地给对象添加额外的功能 主要解决:继承方式是静态特征,扩…...
【AWS】创建IAM用户;无法登录IAM用户怎么办?错误提示:您的身份验证信息错误,请重试(已解决)
目录 0.背景问题分析 1.解决步骤 0.背景问题分析 windows 11 ,64位 我的问题情景: 首先我创建了aws的账户,并且可以用ROOT用户登录,但是在登录时选择IAM用户,输入ROOT的名字和密码,就会提示【您的身份验证…...
微服务基础知识
文章目录 微服务基础知识一、系统架构的演变1、单体应用架构2、垂直应用架构3、分布式SOA架构(1)什么是SOA(2)SOA架构 4、微服务架构5、SOA和微服务的关系(1)SOA(2)微服务架构 二、分…...
倒残差结构
倒残差结构: 倒残差结构是MobileNetV2中引入的一种设计,用于增强网络的表达能力和特征提取能力,同时保持轻量级的特点。它的核心思想是在每个瓶颈块中,先使用一个扩张卷积(Dilated Convolution)&#x…...
Docker的基本使用
Docker 概念 Docker架构 docker分为客户端,Docker服务端,仓库 客户端 Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务端发起请求,服务端将完成所有的工作并返回相应结果。 Docker …...
paddlenlp安装踩坑记录
错误1 ModuleNotFoundError: No module named paddle.metric我下载paddlepaddle-gpu2.5.0.post117解决了,最开始下载的2.5.1报错,post后面的117是我的cuda版本,不要写你对应的版本号 python3 -m pip install paddlepaddle-gpu2.5.0.post117…...
微服务流程引擎:简单又灵活,实现流程全生命周期管理!
伴随着日益激烈的市场竞争,传统的办公操作已经无法满足发展需要了。如果采用微服务流程引擎加油助力,就可以帮助企业更好地管理数据资源,高效做好各种表单制作,实现高效率办公。流辰信息以市场为导向,用心钻研低代码技…...
Qt表格数据处理
概述 在Qt表格数据处理中,涉及到如下几个具体的类: QAbstractItemModel:这是一个抽象基类,定义了模型(Model)的接口规范。所有的模型类都应该派生自QAbstractItemModel,并实现它的纯虚函数&…...
EasyPOI 实战总结
EasyPOI实战总结 简介 easypoi功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出,Excel模板导出,Excel导入,Word模板导出,通过简单的注解和模板 语言(熟悉的表达式语法),完成以前复杂的写法 使用EasyPOI 环境搭建 # 1.引入相关依…...
【LeetCode-困难题】42. 接雨水
题目 题解一:暴力双重for循环(以行计算水量) 1.先找出最高的柱子有多高(max 3) 2.然后第一个for为行数(1,2,3) 3.第二个for计算每一行的雨水量(关键在于去除…...
npm install 安装依赖,报错 Host key verification failed
设置 git 的身份和邮箱 git config --global user.name "你的名字" > 用户名 git config --global user.email “你的邮箱" > 邮箱进入 > 用户 > [你的用户名] > .ssh文件夹下,删除 known_hosts 文件即可 进入之后有可能会看到 known_hosts…...
SOLIDWORKS焊件是什么?
SOLIDWORKS是一款广泛应用于机械设计领域的三维计算机辅助设计软件。SOLIDWORKS提供了强大的焊件功能,可以帮助工程师们以更高的效率设计焊接件。本文将介绍SOLIDWORKS焊件的概念、特点以及使用方法,以期帮助读者更好地理解和应用这一关键技术。 SOLIDWO…...
2023国赛数学建模D题思路模型代码 高教社杯
本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…...
git协议实现管理(三个步骤)
GitHub官网访问: https://github.com/dashboard 初次使用git的用户要使用git协议大概需要三个步骤: 一、生成密钥对 二、设置远程仓库(本文以github为例)上的公钥 三、把git的remote url远程仓库URL可访问路径修改为git协议(以上两个步骤初次设置过以后,…...
安徽中擎建设公司网站/html网页制作代码
很明显的区间加减单点查询。但由于规模大,于是离散化。在离散化的时候,可以把要查询的点也加入离散化的数组中。 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #define lowbit(x) ((x)&…...
wordpress 显示 列表/手机建站教程
stay hungry stay foolish!! 创新 细节 热爱 责任 求知欲 大脑工作 犯错 哲学 使命 : 我们生来就随身带着一件东西,这件东西指示着我们的渴望,兴趣,热情以 及好奇心,这就是使命。你不需要任何权…...
网站设计培训班/百度推广seo自学
1、ASCII码与unicode码:a、内容大小ASCII码共127个。包括:大小写英文字母、数字、一些符号。unicode:包含所有的语言的编码。b、占用空间大小ASCII码一般为1个字节,unicode码一般为2个字节c、UTF-8编码可变长编码。把unicode字符根据不同的数…...
单页面网站可以做自适应网站吗/网络营销的方法有哪些?
一、准备 hive下载地址:mirror.bit.edu.cn/apache/hive… 二、Hadoop环境搭建 Hadoop安装和配置,请看Hadoop单机版安装 三、mysql安装 因为Hive的默认元数据是Mysql,所以先要安装Mysql。 首先查看mysql 是否已经安装 rpm -qa | grep mysql 复…...
wordpress禁用react/郑州网站推广优化
一、首先说一下,Hadoop有三种运行模式。 第一个是独立(或本地)运行模式:无需运行任何守护进程,所有程序都在一个同一个JVM上执行。 第二个是伪分布模式:Hadoop守护进程运行在本地机器上,模拟一个小规模的集群。 第三个…...
dedecms 生成网站地图/开网店如何运营和推广
传送门:bzoj4036 Min-Max容斥 设max(S)\max(S)max(S)为集合SSS中的最大值,min(S)\min(S)min(S)为集合SSS中的最小值,∣S∣|S|∣S∣为集合SSS的大小,则存在: max(S)∑T⊆S(−1)∣T∣1min(T)min(S)∑T⊆S(−1)∣T∣1max…...