Mybatis【12】-- Mybatis多条件怎么查询?

很多时候,我们需要传入多个参数给sql语句接收,但是如果这些参数整体不是一个对象,那么我们应该怎么做呢?这里有两种解决方案,仅供参考。

1.将多个参数封装成为Map

测试接口,我们传入一个Map,里面的value是一个对象,那么我们可以放字符串,数字,以及一个student对象。

@Test public void testselectStudentByNameAndAge(){ Student stu=new Student("lallal", 1212, 40); Map<String,Object> map=new HashMap<String, Object>(); map.put("nameCon", "hello"); map.put("ageCon", 14); map.put("stu", stu); List<Student>students=dao.selectStudentByNameAndAge(map); if(students.size()>0){ for(Student student:students) System.out.println(student); } }

我们的sql接口,传入的是一个Map,key为String,value为对象。

public List<Student>selectStudentByNameAndAge(Map<String,Object> map);

下面是sql语句,如果value是基本类型的话,我们需要使用#{},里面一定写对应的key,如果value是一个对象的话,里面我们需要写对应的key.属性,比如#{stu.score}

<select id="selectStudentByNameAndAge" resultType="Student"> select id,name,age,score from student where name like '%' #{nameCon} '%' and age> #{ageCon} and score>#{stu.score} </select>

2.使用索引接收多个参数

我们的测试类如下,传入两个参数:

@Test public void testselectStudentByNameAndAgeV2(){ Student stu=new Student("lallal", 1212, 40); List<Student>students=dao.selectStudentByNameAndAgeV2("hello",14); if(students.size()>0){ for(Student student:students) System.out.println(student); } }

在sql接口中使用两个参数

public List<Student>selectStudentByNameAndAgeV2(String name,int age);

在sql语句里面可以使用索引号,例如#{0},下标从零开始,与参数一一对应

<!-- 接受多个参数 --> <select id="selectStudentByNameAndAgeV2" resultType="Student"> select id,name,age,score from student where name like '%' #{0} '%' and age> #{1} </select>

个人理解:如果是简单的多参数,比如没有涉及到对象的,可以直接使用索引号就可以了,这样看起来更简单,如果涉及到参数是对象的话,需要使用对象的属性就用不了索引号,需要使用map,如果参数较多的话,使用map更加方便,修改的时候也更有优势。

【作者简介】
秦怀,公众号【秦怀杂货店】作者,技术之路不在一时,山高水长,纵使缓慢,驰而不息。这个世界希望一切都很快,更快,但是我希望自己能走好每一步,写好每一篇文章,期待和你们一起交流。


__EOF__

本文作者秦怀杂货店
本文链接https://www.cnblogs.com/Damaer/p/14296002.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   第十六封  阅读(116)  评论(0编辑  收藏  举报
编辑推荐:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示