我是Java和mybatis3的新手。在一个项目中,我正在使用mybatis3。

说我有一个名为“ t”的数据库表。有几列。

在项目中,我将向mapper.xml发送一个哈希图(包含2个键值的ArrayList)。从那里将得到2个数组,其中包含列名称的键和列的值...

我想插入该表...到此为止,我认为我将能够动态插入数据并部分更新某些列数据...使用update ...但出现sql语法错误...

我现有的mapper.xml代码

<insert id="createNews" parameterType="map" useGeneratedKeys="true" keyColumn="id">
  INSERT INTO t
    <foreach item="key" collection="Key" index="index" open="(" separator="," close=")">
        #{key}
    </foreach>
    VALUES
    <foreach item="value" collection="Value" index="index" open="(" separator="," close=")">
        #{value}
    </foreach>
  ;
</insert>


部分错误stackTrace ....

### Error updating database.  Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''name'
     )
    VALUES
     (
        'some value'
    ' at line 3


但是当我对列名称进行硬编码时,它可以正常工作...如何动态插入...

注意:我用Google搜索,但找不到...我不想使用任何pojo或注释...在此先感谢...

最佳答案

不确定,但我会尝试一下。使用#{key}时,如果MyBatis是''String等,则MyBatis会在其周围加上额外的Date。如果为列名提供变量,则需要使用直接String替换,即。

错误日志显示类似${key}的内容

你能试一下吗

<insert id="createNews" parameterType="map" useGeneratedKeys="true" keyColumn="id">
  INSERT INTO t
    <foreach item="key" collection="Key" index="index" open="(" separator="," close=")">
        ${key}
    </foreach>
    VALUES
    <foreach item="value" collection="Value" index="index" open="(" separator="," close=")">
        #{value}
    </foreach>
</insert>

10-06 08:47