mybatis之in的使用
大家在一条sql中传入多个查询数据时都会使用的in关键字,可是在sql中明明好好的执行,到了程序中要么报错要么查询为空。原因在于在mybatis中,默认in属性为传递多个数据,则需要遍历循环去读取,外部通过数组或者集合的方式传入,示例如下
Java调用代码
String[] cIdArrays = cId.split(",");
List<Map<String,Object>> queryCourseTypeInfo = eduCourseExtMapper.queryCourseTypeInfo(cIdArrays,pageCode);
Mapper.java代码
List<Map<String,Object>> queryCourseTypeInfo(@Param("arrays") String[] arrays, @Param("pageCode") Integer pageCode);
mapper.xml代码
<select id="queryCourseTypeInfo" resultType="java.util.Map">
select
<if test="pageCode!=null and pageCode!=''">
top 6
</if>
course_name courseName,
(select file_url from tmp_file where id=cours_img) faceUrl,
introduction
from aaa
where CONVERT (varchar, classification_id) in
<foreach item="arrays" index="index" collection="arrays" open="(" separator="," close=")">
#{arrays}
</foreach>
order by create_time desc;
</select>
此处去Mapper.java中params为arrays的数组进行遍历,然后读取数组中的值就可以达到in关键字的效果,讲道理之前没怎么用这个操作,傻乎乎的一个人弄了好久,还得继续学习。
charindex的使用
话不多说先上图,其实和java中的indexOf有些类似,用于定位某个元素,大家再来看看我的需求
需求:一个字段为.123.456.的参数,我需要截取第一个点后到第二点前的数据,我的sql片段如下:
substring(t4.seq,2,charindex('.',t4.seq,2)-2)
起始点为第二个下标,止于第五个下标前,但是...charindex返回给我的并不是第二点的真实下标,所以我后面采用了-2的操作,这样就有一点没有用到定位indexOf的操作,如果哪位朋友有见解欢迎评论滴滴我