有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用mybatis 3传递动态字段和值

我不熟悉Java和mybatis3。在一个项目中,我使用mybatis3

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

在这个项目中,我将向mapper发送一个hashmap(包含2个键、值的ArrayList)。xml。从那里它将得到2个数组,其中包含列名键和列值

我想插进那张桌子里。。。这样,我想我将能够动态插入数据并部分更新某些列数据。。。随着更新。。。但是获取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>

部分错误堆栈跟踪

### 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

但是当我硬编码列名时,它工作正常。。。如何动态插入

注意:我在谷歌上搜索过,但找不到。。。我不想使用任何pojo或批注。。。先谢谢你


共 (1) 个答案

  1. # 1 楼答案

    不确定,但我要试一试。当你使用#{key}时,如果它是StringDate等,MyBatis会在它周围放置额外的''。如果你给你的列名加上一个变量,你需要使用直接的String替换,即${key}

    错误日志显示类似...right syntax to use near ''name') VALUES ('some value'...

    你能试试吗

    <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>