首页 > 其他 > 详细

解决#{}导致的The error may involve defaultParameterMap的问题

时间:2019-11-26 20:08:18      阅读:5618      评论:0      收藏:0      [点我收藏+]

今天想实现给指定表插入数据,出现了

### Error updating database. Cause: java.sql.SQLSyntaxErrorException: 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 ‘‘api_assets0‘ (id,name, level,type,file_id)
values
(3‘ at line 1
### The error may exist in file [E:\java\project\admin\devide\target\classes\mapper\ApiAssetsMapper.xml]
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### SQL: insert into ? (id,name, level,type,file_id) values (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?) , (?,?, ?,?,?)
### Cause: java.sql.SQLSyntaxErrorException: 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 ‘‘api_assets0‘ (id,name, level,type,file_id)
values
(3‘ at line 1
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: 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 ‘‘api_assets0‘ (id,name, level,type,file_id)
values

mapper里

int insert(@Param("list") List<ApiAssets> list,@Param("one") String one);

XML里

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.abc.devide.demo.mapper.ApiAssetsMapper">
    ……
    <insert id="insert">
        insert into #{one} (id,name, level,type,file_id)
        values
        <foreach collection="list" item="item" index="index" separator=",">
        (#{item.id},#{item.name}, #{item.level},#{item.type},#{item.fileId})
        </foreach>
    </insert>

</mapper>

解决方法:

  使用 ${} 接受表名,#{}接受其他参数

将insert部分改为

<insert id="insert">
        insert into ${one} (id,name, level,type,file_id)
        values
        <foreach collection="list" item="item" index="index" separator=",">
        (#{item.id},#{item.name}, #{item.level},#{item.type},#{item.fileId})
        </foreach>
</insert>

就可以成功执行了

说明:

  mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}

  #{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中

  ${} 会导致 sql 注入的问题,优先使用 #{} 

解决#{}导致的The error may involve defaultParameterMap的问题

原文:https://www.cnblogs.com/baby123/p/11937997.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!