简单理解就是,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=:我们直接上例子
标签:xml,mapper,JAVA,List,Param,status,foreach,java From: https://www.cnblogs.com/MorningMaple/p/17894849.html