begin
<foreach collection="items" item="stu">
select name,address,city,province from teachers
<trim prefix="where" prefixOverrides="and|or">
<if test="stu.name!=null">
and name =#{stu.name}
</if>
<if test="stu.age!=null">
and age =#{stu.age}
</if>
<if test="stu.name!=null">
and sex =#{stu.sex}
</if>
</trim>
</foreach>
这样写的查询sql报无效的关系运算符,之后我想到的存储过程
Dao 接口
List<Teacher> queryTeacher(@Param("map")Map<String,Lis<Teacher> map)
查询sql
{
call(#{map.import_params,jdbcType=CURSOR,mode=IN},
#{map.out_params,mode=OUT,javaType=ResultSet,resultMap="baseMap"})
}
调用
Map<String,Teacher> m = new HashMap<String,List<Teacher>);
m.put("import_params,list);
m.put("outparam,null);
teacherDao.queryTeacher(m);
这样查询报错说我的 there is no type handler for com.test.QueryTeacher.importParam,改成 #{import_param} 报错 there is no param import_param
available is map
网上有的人就是这样写的,但是报错,请教各位大神这个如何写, 我将不胜感激。
1.少了and
2.且需要写成多个查询关联结果作为子查询方式,最外只能有一个select
3.foreach的collection="items"里面的items什么意思?弄清楚foreach的用法,如果是list<对象>参数collection="List", name =#{items.name}
比如这样:
select t.* from(
select * from teachers
name =#{items.name}
and age =#{items.age}
and sex =#{items.sex}
) t
为啥要把select * from teachers放在foreach标签里面?
简单的说一下你的需求是什么,还有就是有哪些参数,你这条sql问题太多了,不如重新写。
需求发出来,就你目前的这个SQL,我觉得你连最基本的sql用法都搞不清,foreach里面放个查询是用来做啥子的??我还是第一次见,一般foreach里面是批量insert,update才用的,,建议学一下。。。
根据网上的说法,存储过程人参是cursor,出参也是cursor,Java调用传入一个map,一个入参集合,一个出参集合,#调用的时候报no typehandler found for ccvolist
还有一种办法,你直接在java层直接把你需要的sql拼接起来,直接放mapper里面运行即可