慕仰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进阶
23296 学习 · 118 问题
相似问题