mybatis 多参数 list和String

MyBatis @Param注解深度解析:多参数传递的正确姿势与避坑指南 在MyBatis框架中,参数绑定是SQL映射的核心机制之一,它决定了Java方法参数如何安全、准确地传递到SQL语句中。其原理基于将参数封装为Map结构,通过键值对进行映射。这项技术的价值在于确保数据访问层的健壮性和可维护性,尤其在多参数场景下,能有效避免因参数解析歧义导致的运行时错误。在实际应用场景中,动态SQL编写、集合遍历和条件判断都高度依赖明确的参数命名。本文聚焦于@Param注解的使用,深入探讨其在多参数传递中的必要性,解析常见误区,并提供最佳实践,帮助开发者规避诸如“Parameter not 阅读详情

转载自:https://blog.youkuaiyun.com/u010913106/article/details/50538379/

百度的过程太残酷,一个一个试。因为要放两个参数,需加以区分(多个参数同理)

方法一不建议使用,调用时打包参数不直观,维护成本高,建议方法二,虽然参数多了不好看,但是见文知意。

方法一: dao部分

注意:xml中使用参数需要严格匹配map 中put的key

public void deleteBooks(Map<String, Object> map);

map.put("partnerId", 12L);
map.put("templist",list);


方法二: dao部分
注意:利用@param注解时,因为mapper指定了参数名,xml中使用需要严格匹配

public void deleteBooks(@Param("partnerId")long partnerId ,@Param("templist")List<CPPartnerBookSet> list);

xml 部分:方法一,方法二相同
<delete id="deleteBooks">
        delete from cp.tbl_cp_partner_books
        where partner_id = #{partnerId} 
        and book_id in
        <foreach collection="templist" index="index" item="item" open="(" separator="," close=")">
            #{item.bookId}
        </foreach>

</delete>

特别强调,如果传值 list ,那么list 不能为空,简单说就是确保list中有对象,即使 list.add(null)测试也能过,而 new ArrayList<?>()会报错

MyBatis @Param注解深度解析:多参数传递避坑指南与最佳实践 在Java持久层框架中,参数绑定是ORM(对象关系映射)的核心机制之一,它负责将Java方法中的参数安全、正确地映射到SQL语句的占位符上。MyBatis作为广泛使用的半自动化ORM框架,其参数处理机制直接影响着SQL执行的正确性和代码的健壮性。当Mapper接口方法包含多个参数时,MyBatis默认会使用一套基于参数索引(如arg0, param1)的命名策略进行映射,但这在动态SQL、集合遍历等复杂场景下容易引发“Parameter not found”等运行时异常。为了解决这一问题,@Param注解应 阅读详情

相关推荐

MyBatis @Param注解使用全解析:多参数传递的核心机制与最佳实践

在Java持久层开发中,MyBatis作为主流的ORM框架,其参数绑定机制是理解SQL映射执行的关键。参数绑定的核心原理在于解决Java运行时方法参数名丢失的问题,通过动态代理将方法调用转换为SQL执行。这一机制的技术价值在于提供了灵活、类型安全的数据库操作方式,同时确保了SQL的可维护性。在实际应用场景中,多参数传递是常见的需求,尤其是在复杂查询和动态SQL构建时。本文聚焦于@Param注解的使用,深入探讨其在参数命名、动态SQL引用中的具体规则,并结合BindingException等常见错误,提供清晰

weixin_30444105的博客 392

mybatis传入List参数或者单个String 参数等问题

一:在Userdao里面定义一个方法  public int deleteBatch(List&lt;String&gt;  ids); 在对应的UserDao.xml 错误写法 &lt;delete id="deleteBatch"&gt; DELETE FROM s_user WHERE id in &lt;foreach item="ids" collection="ids" ope...

gaoshan12345678910的博客 1万+

手把手教你用LcmSim+TakeDotLib打造完美LCD显示效果(附12x12汉字配置模板)

本文详细介绍了如何使用LcmSim模拟器与TakeDotLib标准字库工具优化LCD显示效果,包括字体选择、字库生成和实体设备验证。通过12x12汉字与8x16 ASCII的黄金比例配置,帮助开发者解决嵌入式开发中的显示难题,提升用户体验。附赠12x12汉字配置模板,可直接用于项目。

weixin_29205061的博客 135

Mybatis传入多个参数(String,List等)

Mybatis传入多个参数问题记录: dao层接口,多个参数使用注解@Param: /** * 更新为待上传的 */ void createWaitingUploadOrders (@Param("warehouseType") String warehouseType,@Param("siteEn") List<String> siteEn,@Param("platfor...

mochangguan0101的博客 6865

力软敏捷开发框架源码7.0.6旗舰版 JNPF开发平台3.4.5 企业版 旗舰版

JNPF作为作为一款深受用户喜爱的低代码产品,凭借雄厚的科研技术力量、丰富的软件开发项目经验、严谨的项目开发流程和高质量的售后服务,已成功帮助千家企业完成数字化项目,建立了覆盖不同行业客户和不同发展阶段的软件产品服务体系。

huoooos0的博客 1839

GEO数据挖掘实战:用R语言从GSE42872数据集中找到关键差异基因(附完整代码)

本文详细介绍了使用R语言从GSE42872数据集中挖掘关键差异基因的完整流程,包括数据下载、探针ID转换、差异表达分析和功能富集分析。通过实战代码演示,帮助生信研究者掌握GEO数据挖掘的核心技术,快速识别疾病相关基因并理解其生物学功能。

weixin_42625070的博客 365

MyBatis几种不同类型传参的总结

在Web开发过程中,我们根据业务需求将不同类型参数从后台传入到MyBatis的各个不同的mapper命名空间中,包括有string类型,map类型,list集合类型,或者是直接传入一个对象等。 1.String类型    1.1对于string类型,我们一般传 在sql中写明parameterType="string" ,例: 则在获取参数时,如果是要进行非null的判断,则不可在if后直接...

m0_37837382的博客 3万+

金融波动率的“捕手”:GARCH模型,揭秘市场波动的“聚集密码”

摘要: GARCH模型(广义自回归条件异方差)是金融时间序列分析中用于捕捉“波动聚类”现象的核心工具。传统模型(如ARIMA)无法刻画金融数据的时变波动特性,而GARCH通过建模条件方差的动态变化(如$\sigma_t^2 = \omega + \alpha \varepsilon_{t-1}^2 + \beta \sigma_{t-1}^2$),精准预测波动率。Python实战显示,GARCH能有效拟合模拟金融数据的波动聚类,残差无自相关,验证了其优越性。该模型在波动率预测、风险价值(VaR)计算和期权定

u010257409的博客 2048

Mybatis查询parameterType多参数问题

Mybatis查询parameterType多参数问题 一、单个参数: List<EntInfo> findByEnterpriseNameAndStatus(String enterpriseName); <select id="findByEnterpriseNameAndStatus" resultMap="EntInfoResultMap" parameterType="...

weixin_45265076的博客 656

Crazyflie 2.1固件刷写与地址配置全攻略:从开箱到连接Crazyswarm

本文详细介绍了Crazyflie 2.1微型无人机的固件刷写、地址配置及与Crazyswarm系统的集成方法。从开箱检查到多机协同飞行,涵盖了硬件准备、固件刷写、无线电地址修改等关键步骤,帮助用户快速实现集群飞行控制。特别针对Crazyswarm系统集成提供了实用配置示例和调试技巧。

weixin_42530458的博客 404

Verilog仿真时读取bin文件模拟输入数据流,将输出数据流写入bin文件

需要关注的是,一般会省略文件起始地址和读取长度,那么mem为多大,就会从文件中读取多大的数据出来填充mem。如果只需要读取一次文件,那么代码到此就结束了,但是如果还需要每一帧都读取该文件转换为数据流,则在循环里判断新的一帧信号是否到来,在新的一帧再次打开一次文件,从头开始读取数据。

qq_41137205的博客 2772

MyBatis传入多个参数的问题

一、单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">   select t.* from tableName t where t.id...

<'_'>的博客 9719

在鸿蒙中使用AVPlayer完成视频的播放【坚果派】

播放的全流程包含:创建AVPlayer,设置播放资源和窗口,设置播放参数(音量/倍速/缩放模式),播放控制(播放/暂停/跳转/停止),重置,销毁资源。5.准备播放:调用prepare(),AVPlayer进入prepared状态,此时可以获取duration,设置缩放模式、音量等。8.退出播放:调用release()销毁实例,AVPlayer进入released状态,退出播放。6.视频播控:播放play(),暂停pause(),跳转seek(),停止stop() 等操作。今天我们来看一下视频如何正常播放。

坚果的博客 4054

get传参list_MyBatis传入多个参数 ,List集合

一.单个参数:public List getXXBeanList(String xxCode);select t.* from tableName t where t.id= #{id}其中方法名和ID一致,#{}中的参数名与方法中的参数名一直, 我这里采用的是XXXBean是采用的短名字,select 后的字段列表要和bean中的属性名一致, 如果不一致的可以用 as 来补充。二、多参数:pub...

weixin_35110559的博客 1362

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图、天地图)

QGis软件 —— 2、QGis加载在线地图两种方式(谷歌地图)

1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Mybatis入参问题

单个参数 public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">   select t.* from tableName t where t.id= #{i...

苍茫的天涯是我的爱 189

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Mybatis传递参数方法共6种

Mybatis传递参数方法共6种,改文章解决了我的问题,特别是HashMap的使用,不用建那些没用的bean。

1213

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Mybatis05-参数和返回

传参:简单类型、map参数、pojo参数,多个参数;查询语句的返回值类型;@Param注解的用法

qq_31532983的博客 836

MyBatis @Param注解详解:多参数传递场景下的正确使用姿势

在Java持久层框架中,参数绑定是ORM(对象关系映射)的核心机制之一,它负责将Java方法中的参数值安全、正确地映射到SQL语句的占位符中。其原理在于框架需要构建一个参数映射上下文,以便在执行SQL时能够按名称或位置引用传入的数据。这项技术的价值在于保证了数据操作的类型安全性与可维护性,避免了SQL注入风险,并提升了开发效率。在动态SQL构建、多条件查询等常见应用场景中,清晰的参数传递机制尤为重要。本文聚焦于MyBatis框架中解决多参数映射问题的关键注解——@Param,深入解析其在不同参数场景下的绑定

weixin_34163553的博客 347

mybatis parametertype 多个参数

mybatis parametertype 多个参数 一、单个参数: public List<XXBean> getXXBeanList(@param("id")String id); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean"> ...

YunWisdom 1134

关于mybatis多参数查询的方法

最近在做一个Mybatis的项目,由于是接触不久,虽然看了一下资料,但在实际开发中还是暴露了很多问题,其中最让我头疼的就是selete的parameterType问题,网上这类的帖子虽然有但是不全,很多情况下很难找到你想要的答案。 为此我对这个问题进行了总结,希望对像我这样的新手有一定的帮助。 (一)单个参数 public List getXXBeanList(String xxCode

xiaobc1234的专栏 843

MySqL集成Mybatis的xml文件sql传参方法

一、单个参数: public List<XXBean> getXXBeanList(String xxCode); <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">   select t.* from tableName t where t.id= ...

wu_Dream的博客 1828

parameterType 传入多参数 MyBatis传入多个参数的问题

    一、单个参数: public List&lt;XXBean&gt; getXXBeanList(String xxCode); &lt;select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean"&gt;   select t.* from tableName t wher...

lingdian1614114082的博客 743
上一篇: IDEA中代码不小心删除,或者改了半天想回退到某个特定时间怎么办?
下一篇: Mybatis多个集合的迭代处理
intelrain
博客等级 码龄10年 3936粉丝 216原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值