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

时间:2014-09-16 20:02:14

标签: java sql mybatis

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

说我有名为" t"的数据库表。有几列。

在项目中,我将向mapper.xml发送一个hashmap(包含2个keyList的值,值)。从那里它将获得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>

部分错误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

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

注意:我用谷歌搜索,但无法找到...我不想使用任何pojo或注释...提前感谢...

1 个答案:

答案 0 :(得分:7)

不确定,但我会开枪。当您使用#{key}时,如果是''String等,MyBatis会在其周围添加额外的Date。如果您为列名提供变量,则需要使用直接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>