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