SSM框架中Mybatis传递参数的几种方法

Mybatis的几种传参方式 本文来说下有关Mybatis的几种传参方式 文章目录概述单个参数 概述 本文说下Mybatis的几种传参方式 单个参数 阅读详情

在实际使用SSM框架进行开发过程中,经常涉及到请求参数的传递,今将项目中常用的几种传值方法进行总结。

总体内容

总体内容

传递单个参数

传递单个参数的方法比较简单,咱们直接上代码。
本文以根据用户名查询用户为例:
Dao层:

List<User> findByUsername (String username);

mapper.xml:

<select id="findByUsername" resultType="User" parameterType="String">
    select * from user where username = #{username}
</select>

传递多个参数

以根据用户名和密码查询用户为例:

匿名传参法

Dao层:

User selectByUsernamePwd(String username,String pwd );

mapper.xml:
有两种方式:

<select id=" selectByUsernamePwd " resultMap="BaseResultMap" >
  select * from user where user_name = #{0} and pwd = #{1}
</select>

或者

<select id=" selectByUsernamePwd " resultMap="BaseResultMap" >
  select * from user where user_name = #{param1} and pwd = #{param2}
</select>

上述方法可读性不好,不推荐使用。

@Param传参法

该方法使用@Param注解显示的告诉mybatis参数的名字,然后在xml中就可以使用参数名去引用。
Dao层:

User selectByUsernamePwd(@Param("username") String username, 
   @Param("pwd") String pwd );

mapper.xml:

<select id=" selectByUsernamePwd " resultMap="BaseResultMap" >
  select * from user where user_name = #{username} and pwd = #{pwd}
</select>
Map传参法

使用map来传递多个参数,可以直接使用参数名称进行引用。
在使用该方法进行传递参数的时候,需在controller层将接收到的参数转化成HashMap类型。
Controller层:

@GetMapping("selectByUsernamePwd")
public viod selectByUsernamePwd (String username,String pwd)
{
    Map params = new HashMap<>();
    params.put("username",username);
    params.put("pwd",pwd);
    User user = user. selectByUsernamePwd (params);
}

Dao层:

User selectByUsernamePwd(Map params);

mapper.xml:

<select id=" selectByUsernamePwd " resultMap="BaseResultMap" parameterType="map">
  select * from user where user_name = #{username} and pwd = #{pwd}
</select>
实体类传参法

使用bean的方式来传递多个参数,使用时parameterType指定为对应的bean类型即可。
这就传参方式的优点是比较方便,controller层使用@RequestBody接收到实体类参数后,直接传递给mapper层调用即可,不需要在进行参数的转换。
controller层:

@PostMapping ("selectByUsernamePwd")
public viod selectByUsernamePwd (@RequestBody User user)
{
    User user = user. selectByUsernamePwd (user);
}

Dao层:

User selectByUsernamePwd(User user);

mapper.xml:

<select id=" selectByUsernamePwd " resultMap="BaseResultMap" 
  parameterType="com.demo.User">
  select * from user where user_name = #{username} and pwd = #{pwd}
</select>
JSON传参法

使用该方法,controller层收到JSON型数据后,直接传递给Dao层进行查询操作,简单、方便。
controller层:

@PostMapping ("selectByUsernamePwd")
public viod selectByUsernamePwd (@RequestBody JSONObject user)
{
    User user = user. selectByUsernamePwd (user);
}

Dao层:

User selectByUsernamePwd(JSONObject user);

mapper.xml:

<select id=" selectByUsernamePwd " resultMap="BaseResultMap"
   parameterType="com.alibaba.fastjson.JSONObject">
   select * from user where user_name = #{username} and pwd = #{pwd}
</select>
集合传参法

在一些复杂的查询中(如 sql中的 in操作),传统的参数传递已无法满足需求,这时候就要用到List、Set、Array类型的参数传递,下面以查询年龄为24,35,47岁的用户为例:
controller层:

@PostMapping ("selectByUserByAges")
public List<User> selectByUserByAges (@RequestBody List<Short> ages)
{
List<User> users = user. selectByUserByAges (ages);
return users;
}

Dao层:

List<User> selectByUserByAges(List<Short> ages);

mapper.xml:

<select id="selectByUserByAges" resultMap="BaseResultMap">
  SELECT * from user where age in
    <foreach collection="list" open="(" separator="," close=")" item="age">
      #{age}
    </foreach>
  </select>

这里foreach表示循环操作,具体的参数含义如下:
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔符,
close表示以什么结束
在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
1.如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2.如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3.如果传入的参数是多个的时候,我们就需要把它们封装成一个Map或者Object

集合+对象传参法

该类参数与实体类传参法类似,只不过更复杂一些。下面以班级、学生为例进行说明:
实体类:

@Data
public class Class{
    private Long id;

    private String className;

    List<Student> students;
}

controller层:

@PostMapping("selectClass")
public List<Class> selectClass (@RequestBody Class class)
{
    List<Class> result= class.selectClass (class);
    return result;
}

Dao层:

List <Class> selectClass (@Param("class")Class class);

mapper.xml:

<select id="selectClass" resultMap="BaseResultMap" parameterType="com.demo.Class">
    SELECT * from class where id =#{id} and age in
    <foreach collection="class.students" open="(" separator="," close=")" 
      item="student">
        #{student.age}
    </foreach>
</select>

扫描下方二维码,关注微信公众号,精彩内容同步更新,有问题可随时交流
微信公众号

mybatis的参数处理详解 使用标签的 parameterType 属性来设定。该属性的取值可以是基本类型,引用类型(例如:String 类型),还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装类,使用实体类的包装类作为参数传递。 阅读详情

相关推荐

深入理解MyBatis:传参方式大揭秘与动态SQL妙用

亲爱的程序员朋友们,你是否也在用MyBatis时对传参方式一头雾水?或者写动态SQL时觉得那是一种玄妙的“巫术”?作为Java世界的ORM轻量级框架,MyBatis 的灵活性和简洁性可谓广受好评,尤其在大数据量和复杂SQL操作的项目中,MyBatis就是一把“如意金箍棒”。今天,让我们带着好奇心,细细探究MyBatis的两种常用传参方式,以及动态SQL的使用技巧。希望这篇文章能让你在MyBatis的世界中找到些许清晰的“路标”,学会轻松使用MyBatis构建复杂而高效的数据查询!

喵手的博客 1185

Mybatis in 条件传参三种实现方法(直接$,List,[])

第一种方法:in 条件为拼接好的字符串 如果直接传入拼接好的where in 条件, 比如('111','222','333'),则需要使用${idlist}传参,即绝对引用,而不能使用# 如果使用#传参会被mybatis当成字符串再添加一层''引号,导致错误, 优点:简单方便,高效, 缺点:不能防止SQL注入 第二种方法:in 条件为List对象 in条件直接传入List对象,让mybatis再去拼接生成in条件,这个很麻烦,但是可以防止SQL注入第三种方法:in 条件为Strin...

wh445306 4万+

SSM框架快速入门:MyBatis与JavaWeb整合教程

SSM框架是Spring、SpringMVC和MyBatis三大框架的组合简称,是目前主流的Java EE企业级应用开发框架。它以Spring为核心,整合了SpringMVC和MyBatis两个子框架,实现了表现层、业务层和持久层的解耦,使得系统各层的职责更加清晰,便于维护和扩展。ORM(Object-Relational Mapping)对象关系映射是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

weixin_34640289的博客 1019

mybatis使用IN字段传入参数

1.通过List<String> 进行传入参数 list为参数集合名 <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> ...

Ru_yin_hai的博客 6395

lidar360 V8.0 & lidar360MLS V8.0雷达点云数据处理软件

机载林业 — 基于机载激光雷达点云数据提取一系列森林结构参数(如:高度分位数、叶面积指数、郁闭度等),分割单木并提取单木参数(包括树的位置、树高、胸径、枝下高、冠幅等属性),利用软件的多种回归分析功能可以结合地面调查数据反演森林生物量、蓄积量等功能参数。还可以生成等高线、山体阴影、坡度、坡向、粗糙度等多种产品。分类 — LiDAR360提供多种分类功能,包括地面点分类、模型关键点分类、选择区域地面点分类、机器学习模型分类(可高效地分离建筑、植被、路灯等通用类别)、深度学习模型分类、自定义深度学习分类等。

2403_83796253的博客 5148

【信息安全】seed-labs实验-Firewall Exploration Lab

本实验主要就是基于LKM和Netfilter实现简单的防火墙,重点是后者。路由器是有两个ip的,一个是外网ip,一个是内网ip每一次做完实验,都要做好收尾工作(比如:模块装入之后,要记得移除;iptables命令设置完规则之后,要把对应规则删掉)

可乐大牛的博客 5995

dao传递类参数 mybatis_SSM框架中Mybatis传递参数的几种方法

在实际使用SSM框架进行开发过程中,经常涉及到请求参数的传递,今将项目中常用的几种传值方法进行总结。总体内容总体内容传递单个参数传递单个参数的方法比较简单,咱们直接上代码。本文以根据用户名查询用户为例:Dao层:List<User> findByUsername (String username);mapper.xml:<select id="findByUsernam...

weixin_34375356的博客 361

永磁同步电机自抗扰控制ADRC(位置环/速度环控制器)Matlab/Simulink仿真(S-Function)

ESO是ADRC的核心,其作用是跟踪被控对象的输出,同时给出受控对象的各阶状态变量以及系统总扰动的实时估计,将其补偿到控制器中,实现动态补偿线性化。NLSEF采用非线性函数把TD产生的跟踪及微分信号与ESO给出的状态变量估计值之间的误差进行非线性组合得到初级控制量,然后同总扰动的补偿量一起生成最终的控制信号。自抗扰控制(ADRC)技术的核心思想是将简单的积分串联型视为标准模型,把系统模型中不同于标准型的部分和外部干扰之和视为总扰动,并将其扩张为一个新的状态。看作系统内外部扰动之和。令一个高阶状态变量为。

m0_66341377的博客 7613

controller调用controller的方法_SSM框架中Mybatis传递参数的几种方法

在实际使用SSM框架进行开发过程中,经常涉及到请求参数的传递,今将项目中常用的几种传值方法进行总结。总体内容总体内容传递单个参数传递单个参数的方法比较简单,咱们直接上代码。本文以根据用户名查询用户为例:Dao层:List<User> findByUsername (String username);mapper.xml:<select id="findByUsernam...

weixin_39668282的博客 1110

工业自动化中气动夹爪选型、调试与维护全流程实战解析

在工业自动化领域,气动执行元件是实现精准抓取与搬运的基础。其工作原理是通过压缩空气驱动气缸,转化为直线或旋转运动,从而控制夹爪的开合。这类技术因其结构简单、响应快速、成本低廉及维护方便,在自动化产线中具有极高的技术价值,是实现高效、可靠物料搬运的核心单元。其典型应用场景涵盖电子装配、汽车制造、食品包装等行业的上下料、分拣与定位工序。本文以工业自动化中常见的二指平行气动夹爪(常被工程师代号化为“Gripper-A”)为例,深入剖析其从硬件选型、气动系统集成到程序逻辑联锁的完整工程实践。内容聚焦于夹持力计算中惯

weixin_42629671的博客 366

光猫桥接后网速不升反降?可能是你的路由器在“偷懒”!

本文详细分析了光猫桥接后网速不升反降的常见原因,包括路由器性能不足、MTU/MSS值设置错误等,并提供了四个关键排查步骤和路由器选购指南。通过优化PPPoE拨号设置和硬件配置,帮助用户解决网速下降问题,提升家庭网络性能。

hqmln的博客 611

【SSM框架】Mybatis详解10(源码自取)之入参、返回值map

本节复习了 指定参数的位置、入参是map、返回值是map,解决多个同属性入参问题!!!

muzi_longren的博客 5162

DFT笔记 DC/AC mode与Func

DFT scan可以分为DC和AC两种,区别如下图。

m0_61544122的博客 5721

SSM框架简单介绍

一. SSM框架简介及特征 1.SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow 里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring 的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。 Spring MVC 分离了控制器、模型对象、过滤器以及处理程序对象的角

qq_44709970的博客 5万+

【项目实战】TARA威胁分析和风险评估

TARA是信息安全领域中的一种风险评估方法,在汽车信息安全的上下文中,TARA分析特别重要,因为它可以帮助识别和管理与智能网联车辆相关的各种威胁,包括数据泄露、未经授权的访问、远程操控等。通过TARA分析,企业可以制定出针对性的安全目标、产品要求和产品安全声明,以确保汽车及其零部件符合相关的信息安全标准和法规。此外,TARA分析还可以与数字化建模系统结合,以更系统化和高效的方式进行风险评估和管理。

奶爸的编程之路,也就一周冷个三天 2709

【DRAM存储器五十四】LPDDR5介绍--PHY简介和LPDDR5训练流程

简述LPDDR5 PHY的基本功能和训练流程简介

highman110的博客 907

SSM——mybatis传递参数到mapping.xml

mybatis传递参数到mapping.xml 第一种方案 ,通过序号传递 DAO层的函数方法 Public User selectUser(String name,String area); 对应的Mapper.xml <select id="selectUser" resultMap="BaseResultMap"> select * from user_user_t...

qq_39236283的博客 244

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

[SSM基础]Mybatis传递多参数

引言 使用Mybatis时如果sql语句存在多个参数,那么这就涉及到 java 代码给mapper文件传参问题,这里有四种方法: 使用@Param注解给参数命名:#{自定义的名称} 使用java对象传参:#{java对象属性名称} 使用参数的位置:#{arg位置值,从0开始} 使用map记录参数:#{map的key} 下面我一一介绍; 注:下面示例使用的数据库表student为: 使用@Param注解给参数命名:#{自定义的名称} 这个就是在mapper.java文件中每一个参数前加一个@Param(

YXXXYX的博客 1263

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SSM框架之MyBatis

文章目录MyBatis原生态jdbc程序中的问题mybatis框架原理mybatis架构案例log4j.properties的使用SqlMapConfig.xml的使用po类和映射文件的使用创建会话操作数据库mybatis开发dao的方法SqlSession使用范围原始dao开发方法mapper动态代理方法SqlMapConfig.xml的详解properties属性settings(全局参数配置...

MOKE_SPACE 1668

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MyBatis 传递多个参数的方法

这里有三种方法可以用来传递参数: 1.利用Map(不推荐); 2.利用注解(推荐,在参数小于5个时使用比较方便) 3.利用Java Bean,推荐,在参数大于5个即参数比较多时候使用。 #使用注解: //使用注解来传递多个参数 public List&lt;Role&gt; findRolesByAnnotation(@Param("roleName") String role...

渔闻520的博客 252

SSM框架中mybatis传递多个参数实现联合查询的两种方法

①将多个参数封装成一个类1.首先创建一个类,将参数作为类的属性public class Student {private int studentId;private String studentName;private String studentClassid;public int getStudentId...

weixin_40705360的博客 738

【SSM】MyBatis动态代理及参数传递

目录 一、原始dao开发的问题 二、mapper动态代理模式 三、测试 四、Mybatis的多参数传递 ①:JavaBean传递模式(传递的参数为JavaBean的实体类) ②:Map模式(如果传递的参数个数较少而且没有对应的JavaBean) ③:注解@param模式 五、参数为集合或数组 一、原始dao开发的问题 程序员需要写dao接口和dao实现类,需要向...

offer! 1285

SSM框架简单讲解,内含代码加注释,详细

虽然现在的ssm市面上大多数公司已经不用了,除了一些个别公司的老项目还再用,甚至有的项目还在用ssh这种更古老的框架,但是我们要想学习更高级的框架比如springboot那么ssm肯定是要学的。

scfvlog的博客 3692

SSM之Mybatis框架

Mybatis

_山月见光的博客 1159

SSM框架——Mybatis

MyBatis 是一款优秀的持久层半自动化框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。其功能简单来说有简化JDBC参数传递与返回值处理。

m0_65537482的博客 1191

SSM框架简介

SSM框架简介 SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大型的企业级应用系统。 1.Spring简介 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod

GreyWings的博客 12万+
上一篇: 记一次Cesium地形数据生成过程
下一篇: PyQGIS开发环境配置
giscoder
博客等级 码龄7年 20粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值