使用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> 
+0

在我的情况下,我相信useGeneratedKeys =“true”为foreach中的项目创建自动ID。是否有可能检索这些新的ID? – aloplop85 2013-07-17 14:16:45

设置隔板下方

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是没有必要的地图,它可以根据您的需要任何东西。