mybatis以及mysql常見問題

1.設置外鍵失敗問題

1.問題描述

alter table stu add foreign key(cno) references user(id);
Failed to add the foreign key constraint. Missing index for constraint ‘stu_ibfk_1’ in the referenced table ‘user’

2.解決方案:

作爲外鍵,user表中的id必須是唯一值,因此得添加約束unique,或者primary key;
設置外鍵的辦法:

ALTER TABLE user ADD UNIQUE (id)

2.批量刪除出現 sql injection violation, multi-statement not allow : …的問題

1.問題描述:

【異常】——Cause: java.sql.SQLException: sql injection violation, multi-statement not allow :XXXXX

2.解決方案

不允許批量執行,其本質錯誤是Druid的防火牆配置(WallConfig)中變量
multiStatementAllow默認爲false,在源碼中當多條語句時,判斷了是否開啓了批量執行,
否則報錯不允許執行多條語句。

1.引入阿里的Durid連接池

<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>${durid}</version>
		</dependency>
2.創建一個配置類來開啓Druid的防火牆配置
package com.boot.zhiyi.config;

import com.alibaba.druid.filter.Filter;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;

import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@Configuration
public class DuridConfig {

    @Autowired
    WallFilter wallFilter;
    @Bean(name = "dataSource")    //聲明其爲Bean實例
    @Primary  //在同樣的DataSource中,首先使用被標註的DataSource
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource(){
        DruidDataSource datasource = new DruidDataSource();

        // filter
        List<Filter> filters = new ArrayList<>();
        filters.add(wallFilter);
        datasource.setProxyFilters(filters);

        return datasource;
    }
    @Bean(name = "wallFilter")
    @DependsOn("wallConfig")
    public WallFilter wallFilter(WallConfig wallConfig) {
        WallFilter wallFilter = new WallFilter();
        wallFilter.setConfig(wallConfig);
        return wallFilter;

    }

    @Bean(name = "wallConfig")
    public WallConfig wallConfig(){
        WallConfig wallConfig = new WallConfig();
        wallConfig.setMultiStatementAllow(true);//允許一次執行多條語句
        wallConfig.setNoneBaseStatementAllow(true);//允許一次執行多條語句
        return wallConfig;
    }


}

3.在application.properties的配置文件中修改jdb連接路徑,添加allowMultiQueries=true,改爲如下:
spring.datasource.url=jdbc:mysql://localhost:3306/vqqdeoplay?autoReconnect=true&useUnicode=true&characterEncoding=utf-8&&zeroDateTimeBehavior=CONVERT_TO_NULL&&serverTimezone=GMT%2B8&useSSL=false&&allowMultiQueries=true
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章