使用MyBatis插入对象列表3
问题描述:
我试图在数据库中插入一个列表,但我得到了一些错误:org.springframework.jdbc.BadSqlGrammarException:SqlSession操作;错误的SQL语法[];嵌套异常是java.sql.SQLException:ORA-00913:值太多(...)。使用MyBatis插入对象列表3
,我用的代码:
<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>
吾道CALS的方法:
SqlSessionTemplate().insert(MAPPER+".insertListMyObject", parameterList);
凡PARAMETERLIST是:
List<MyObjects>.
是否有人有一个关于线索这个错误是什么?或者如果确实存在更好的方式来执行多重插入操作。
非常感谢!
答
我不知道你是否可以用oracle INSERT声明来做到这一点。 INSERT WITH VALUES(与子查询不同)只允许一行的值!
为此,请尝试批量插入。 MyBatis示例可以找到here。
答
这样的事情在你的DAO层可能有助于
public class MyBatisDao
{
private SqlSessionFactory mSqlSessionFactory;
public void insertUsers(List<User> users) {
SqlSession session = mSqlSessionFactory.openSession(ExecutorType.BATCH);
try {
for(User user:users)
{
session.insert("com.you.insertUsers",user);
}
}catch(Exception e) {
} finally {
session.close();
}
}
}
答
log4j的配置给MyBatis你可以找到的bug。
试图
<insert id="insertListMyObject" parameterType="java.util.List" >
INSERT INTO my_table
(ID_ITEM,
ATT1,
ATT2)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.idItem, jdbcType=BIGINT},
#{item.att1, jdbcType=INTEGER},
#{item.att2, jdbcType=STRING})
</foreach>
</insert>
答
设置隔板下方
separator="),("
答
给出我建议你使用批处理,这是好多了,这是标准的。此查询不适用于某些数据库(例如Oracle)。
答
通过使用以下查询,您可以使用Mybatis和Oracle一次插入多条记录。
<insert id="insertListMyObject" parameterType="map" >
BEGIN
insert into table_name values (11,11);
insert into table_name2 values (11,112);
END;
</insert>
这是我如何为oracle做的,它的工作原理。请注意,parameterType=map
是没有必要的地图,它可以根据您的需要任何东西。
在我的情况下,我相信useGeneratedKeys =“true”为foreach中的项目创建自动ID。是否有可能检索这些新的ID? – aloplop85 2013-07-17 14:16:45