mybatis 执行带多行sql 查询语句 20C
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       

网上有的人就是这样写的,但是报错,请教各位大神这个如何写, 我将不胜感激。

6个回答

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里面运行即可

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问