mysql - 为什么mybatis在执行查询时会提示SQL语法错误?

标签 mysql spring-boot mybatis spring-mybatis

我有一个 Mybatis 映射器,它应该在数据库表中创建一个条目。映射器定义如下-

    <select id="saveUser" parameterType="User" resultMap="UserResultMap">
        DROP TEMPORARY TABLE IF EXISTS temp_role_id;
        CREATE TEMPORARY TABLE temp_role_id(id int);
        INSERT INTO temp_role_id VALUES
        <foreach collection="roles" item="role" separator=",">
            (${role.id})
        </foreach>;
        call insert_user_sp('${name}', '${username}', '${email}', '${password}');
    </select>

存储过程定义如下-

DELIMITER //
CREATE PROCEDURE insert_user_sp(
  u_name VARCHAR(40),
  u_username VARCHAR(20),
  u_email VARCHAR(40),
  u_password VARCHAR(100)
)
BEGIN
  INSERT INTO users(name, username, email, password)
  VALUES(u_name, u_username, u_email, u_password);

  SET @v_user_id = last_insert_id();

  INSERT INTO user_roles(user_id, role_id)
    SELECT @v_user_id, id from temp_role_id;

  DROP TEMPORARY TABLE IF EXISTS temp_role_id;

  SELECT id, name, username, email, password, created_at, modified_at
    FROM users where id = @v_user_id;
END //

DELIMITER ;

mybatis给出的错误语句如下-

### Error querying 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 'CREATE TEMPORARY TABLE temp_role_id(id int);
        INSERT INTO temp_role_id VA' at line 2
### The error may exist in mybatis/mappers/UserMapper.xml
### The error may involve UserMapper.saveUser-Inline
### The error occurred while setting parameters
### SQL: DROP TEMPORARY TABLE IF EXISTS temp_role_id;         CREATE TEMPORARY TABLE temp_role_id(id int);         INSERT INTO temp_role_id VALUES                        (4)          ;         call insert_user_sp('Ujjal Das', 'ujjaldas223', 'ujjaldas223@gmail.com', '$2a$10$JlIb3BRXffYhMV8j9Wy2OuG2Wu53lGrHKexKspErzhi/JGwMhsvoO');

但是当我在 mysql 中执行相同的查询时,它执行得很愉快。

enter image description here

如果mysql在执行相同的查询时没有任何问题,为什么mybatis会提示同样的问题?

最佳答案

哎呀,这真是一次巨大的搜索。

@Akina指出,jdbc mysql out 不支持多查询。

如果有人遇到同样的问题,请查看此solution .

关于mysql - 为什么mybatis在执行查询时会提示SQL语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59676115/

相关文章:

mysql - 这可以在一个查询中完成吗?

mysql - spring mvc + mybatis + mysql5.7 节省时间8小时

php - 如何在 MySQL 中编写以下输出的查询

mysql - 检查两个表中是否存在相同值的查询,如何组合两个查询

java - 如何强制 SpringBoot 使用多个配置类中的一个且仅一个?

spring - 如何修复 Spring Boot 一对多双向无限循环?

java - Spring-Data-Redis 与 Jedis putIfAbsent 用于分布式锁 - 不正确的行为

java - 为用户定义的 Oracle 表类型编写 MyBatis3 TypeHandler

java - mybatis 不返回延迟获取的所有行

php - Laravel 在迁移中删除外键