为了账号安全,请及时绑定邮箱和手机立即绑定

老师我按照你写的进行测试出现了如下问题,麻烦老师帮我看一下代码如下

package com.hxd.sqlAbout;

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlSource;

public class DeleteAllMethod extends AbstractMethod {

    @Override
    public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
        String sql="delete from "+tableInfo.getTableName();
        String method="deleteAll";
        SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);

        return addDeleteMappedStatement(mapperClass,method,sqlSource);
    }
}
package com.hxd.sqlAbout;

import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.injector.methods.*;
import org.springframework.stereotype.Component;

import java.util.List;


@Component
public class SqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        methodList.add(new DeleteAllMethod());
        return methodList;
    }
}
package com.hxd.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hxd.pojo.User;
import org.springframework.stereotype.Repository;


@Repository
public interface UserMapper extends BaseMapper<User> {
 int deleteAll();
}
@RequestMapping("deletealluser")
public String deleteAllUser(){
    int i= userService.deleteAllUser();
    if(i>0){
        return "删除所有成功";
    }
    return "删除所有失败";
}
public int deleteAllUser() {
    int i = userMapper.deleteAll();
    return i;
}

http://img1.sycdn.imooc.com//5ecccd0700012d8619160380.jpg

正在回答

2 回答

你这个问题,看着提示信息,应该不是程序的问题,而是因为数据库外键的问题,你删除所有数据,由于有的数据行有外键的约束,不允许你进行物理删除。

1 回复 有任何疑惑可以回复我~
* Consume Time:42 ms 2020-07-10 14:18:43
*  Execute SQL:delete from users
* org.springframework.dao.DataIntegrityViolationException:
* ### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException:
* Cannot delete or update a parent row: a foreign key constraint fails (`mp`.`users`, CONSTRAINT `manager_fks` FOREIGN KEY (`manager_id`) REFERENCES `users` (`id`)
* 当因为外键发生报错时:
* 问题主要是删除记录的时候删不了,最后发现是中间表的外键默认删除时是RESTRICT,
*   当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。
*   当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。
*   当取值为Set Null时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。
*   解决:  把外键字段原来默认的Restrict改成CASCADE即可


1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

老师我按照你写的进行测试出现了如下问题,麻烦老师帮我看一下代码如下

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信