【FAQ】JAVA:mapper.java和mapper.xml的关系,以及foreach的用法
简单理解就是,java声明了方法,xml实现了方法,类似与接口与实现接口,他们之间的关系如下:
// Mapper.java中 List<Ranks> inquireOnlyName( @Param("names") List<String> names, @Param("status") String status, @Param("startIndex") int startIndex, @Param("pageSize") int pageSize, @Param("namesLength") int namesLength );
<!--Mapper.xml中--> <select id="inquireOnlyName" resultType="maple.morning.yystools.entity.Ranks"> SELECT * FROM ranks WHERE (CASE WHEN ranks_1 IN <foreach collection="names" index="index" item="name" open="(" separator="," close=")"> #{name} </foreach> THEN 1 ELSE 0 END + CASE WHEN ranks_2 IN <foreach collection="names" index="index" item="name" open="(" separator="," close=")"> #{name} </foreach> THEN 1 ELSE 0 END ) >= #{namesLength} AND status IN ${status} ORDER BY verify_time DESC LIMIT #{startIndex}, #{pageSize} </select>
java中的方法名,对应xml中id的值
java中的返回属性,对应xml中resultType的值
此处需要返回原始的类,而不是包装类,例如List<>是包装类,而Ranks才是需要被返回的类,因此在xml中要返回原始的类!
参数:
status,startIndex,pageSize,namesLength这四个参数JAVA和xml是一一对应的
然后是names是一个List<String>,我们想把他作为in的条件参数,因此我们就要用到foreach
foreach:
collection:对应java传递的参数,也就是names(网上很多人都说什么List就要传递list,Array传递array什么的可能是我版本比较新哈,collection只能赋值java传递的参数才能运行)
index:索引,选填
item:每个元素取出来的值赋值给谁,这里我们用name接收每一个元素的值,然后放到#{name}
open和separator和close=:我们直接上例子👇:
foreach运行完后,拼接到in后的它长这样:('元素1','元素2','元素3','元素4'...),如果元素是数字,就没有单引号(他会自己判断去还是不去掉)。
很显然:
open:定义了拼接时候的第一个字段'('
separator:定义了每一个元素之间用什么符合间隔开,这里是用逗号',',如果为空就是贴在一起
close:定义了拼接末尾的最后一个字段')'
分类:
查缺补漏/奇怪の知识点,增加了!
, 只写一次? / 后
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)