Oracle数据库使用mybatis的foreach标签应注意的问题

来源:互联网 发布:base x以太网端口 编辑:程序博客网 时间:2024/06/09 16:08
使用mybatis做数据持久化操作的时候,遇到一个问题,基于oracle数据库做insert操作时,如果使用mybatis的foreach标签,会报错,原来的insert语句如下:
<insert id="importExcelData">        insert into tbl_marketing_activities            (id,owner,type,name,state,startdate,enddate,budgetcost,actualcost,description,createby,createtime)        values            <foreach collection="list" item="obj" separator=",">                (#{obj.id},#{obj.owner},#{obj.type},#{obj.name},#{obj.state},#{obj.startDate},#{obj.endDate},#{obj.budgetcost},#{obj.actualcost},#{obj.description},#{obj.createBy},#{obj.createTime})            </foreach>    </insert>

执行之后,报错:“sql未正确结束”,查阅相关资料以后,发现oracle数据库不支持原生的foreach操作,修改之后,语句如下:

<insert id="importExcelData">        insert into tbl_marketing_activities        (id,owner,type,name,state,startdate,enddate,budgetcost,actualcost,description,createby,createtime)            select t.* from(                <foreach collection="list" item="obj" separator="union all">                    select                    #{obj.id},#{obj.owner},#{obj.type},#{obj.name},#{obj.state},#{obj.startDate},#{obj.endDate},#{obj.budgetcost},#{obj.actualcost},#{obj.description},#{obj.createBy},#{obj.createTime}                    from dual                </foreach>        ) t    </insert>

此处注意,separator应使用union all,并且用select * from dual 语句代替values()
特此记录

原创粉丝点击