使用 MyBatis 3 插入对象列表
我尝试在数据库中插入列表,但出现一些错误:org.springframework.jdbc.BadSqlGrammarException:SqlSession 操作;错误的 SQL 语法 [];嵌套异常是 java.sql.SQLException: ORA-00913: 值太多 (...)。
我使用的代码:
<insert id="insertListMyObject" parameterType="java.util.List" >
INSERT INTO my_table
(ID_ITEM,
ATT1,
ATT2)
VALUES
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item.idItem, jdbcType=BIGINT},
#{item.att1, jdbcType=INTEGER},
#{item.att2, jdbcType=STRING}
</foreach>
</insert>
我的 dao 调用方法:
SqlSessionTemplate().insert(MAPPER+".insertListMyObject", parameterList);
参数列表在哪里:
List<MyObjects>.
有人知道这个错误是什么吗?或者如果确实存在更好的方法来执行多次插入操作。
非常感谢!
I've tried to insert a list in a database but I've got some the error: org.springframework.jdbc.BadSqlGrammarException: SqlSession operation; bad SQL grammar []; nested exception is java.sql.SQLException: ORA-00913: too many values (...).
The code that I've used:
<insert id="insertListMyObject" parameterType="java.util.List" >
INSERT INTO my_table
(ID_ITEM,
ATT1,
ATT2)
VALUES
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
#{item.idItem, jdbcType=BIGINT},
#{item.att1, jdbcType=INTEGER},
#{item.att2, jdbcType=STRING}
</foreach>
</insert>
My dao cals the method:
SqlSessionTemplate().insert(MAPPER+".insertListMyObject", parameterList);
Where the parameterList is:
List<MyObjects>.
Does someone have a clue about what's this error? Or if does exists a better way to do multiples inserts operation.
Many thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
设置分隔符如下所示
Set the separator as given below
通过使用以下查询,您可以使用 Mybatis 和 Oracle 一次插入多条记录。
这就是我为甲骨文所做的事情,它有效。请注意,
parameterType=map
不一定是地图,它可以是根据您的需要的任何内容。by using following query you may insert multiple records at a time using Mybatis and Oracle.
this is how i did for oracle and it works. Note that
parameterType=map
is not necessary a map it can be anything according to your needs.配置log4j到mybatis,就可以发现bug了。
尝试
config log4j to mybatis ,you can find the bugs.
trying
我想知道您是否可以使用 oracle INSERT 来完成此操作陈述。带 VALUES 的 INSERT(除了带有子查询的 INSERT)确实只允许一行值!
为此,请尝试批量插入。可以在此处找到 MyBatis 示例。
I wonder if you can do this with an oracle INSERT statement. The INSERT with VALUES (other than the one with the subquery) does allow values for one row only!
To do so, try a batch insert. An MyBatis example can be found here.
你的 DAO 层中类似的东西可能会有所帮助
}
something like this in your DAO layer might help
}
我建议你使用batch,它好得多,而且是标准的。此查询不适用于某些数据库(例如 Oracle)。
I suggest you to use batch, it is much better, and it is standard. This query will not work on some databases (Oracle for example).