【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:定义了拼接末尾的最后一个字段')'

posted @   Morning枫  阅读(240)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示