慕仰8533998
2020-05-26 16:02
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;
}
你这个问题,看着提示信息,应该不是程序的问题,而是因为数据库外键的问题,你删除所有数据,由于有的数据行有外键的约束,不允许你进行物理删除。
* 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即可
MyBatis-Plus进阶
23494 学习 · 118 问题
相似问题