当前位置:   article > 正文

springboot项目使用MySQL遇到的外键约束代码实现解决方案_javaspringboot如何操作外键

javaspringboot如何操作外键

在做java spring boot课设的时候,因为涉及到多张表,所以难以避免会有外键约束。而且通常发生在使用delete方法时候出现。报以下的错误

其实解决方法很简单,只需要重写你的delete方法即可

controller

(这里我在最上方加上了@RequestMapping("/admin/category/"))

  1. @RequestMapping("delete")
  2. public String delete(Integer id) {
  3. categoryService.ifdelete(id);
  4. // categoryService.delete(id);//原先的delete方法会导致外键约束的方法
  5. return "redirect:/admin/category/list";
  6. }

servicelmpl

(service这里就不给出代码了,只是些方法的定义)

  1. @Override
  2. public int delete(Integer id) {
  3. return categoryDao.deleteById(id);
  4. }//这里是一开始的delete
  5. @Override
  6. public Category ifdelete(Integer id) {
  7. return categoryDao.ifdelete(id);
  8. }
  9. }

Dao

(这里实现对数据库的查询sql,可以看到,原先的delete(这里用的是接口BaseMappe里面的delete方法)并没有考虑到外键约束,所以我自己写了一个ifdelete方法,当要删除的时候这,个SQL语句的目的是从tab_category表中删除那些在tab_route表中没有的记录,这样就完美解决了外键约束的方法)

  1. @Mapper
  2. public interface CategoryDao extends BaseMapper<Category> {
  3. @Select("SELECT cname,cid FROM tab_category WHERE cid=#{id}")
  4. public Category findById(Integer id);
  5. @Select("DELETE FROM tab_category WHERE cid NOT IN (SELECT cid FROM tab_route);")
  6. public Category ifdelete(Integer cid);
  7. }

还有实现类 

  1. @Data
  2. @TableName("tab_category")
  3. public class Category implements Serializable {
  4. @TableId(type = IdType.AUTO)
  5. private Integer cid;//分类id
  6. private String cname;//分类名称
  7. }
  1. @Data
  2. @TableName("tab_route")
  3. public class Route implements Serializable {
  4. @TableId(type = IdType.AUTO)
  5. private Integer rid;//线路id,必输
  6. private String rname;//线路名称,必输
  7. private Double price;//价格,必输
  8. private String routeIntroduce;//线路介绍
  9. private String rflag; //是否上架,必输,0代表没有上架,1代表是上架
  10. private String rdate; //上架时间
  11. private String isThemeTour;//是否主题旅游,必输,0代表不是,1代表是
  12. private Integer count;//收藏数量
  13. private Integer cid;//所属分类,必输
  14. private String rimage;//缩略图
  15. private Integer sid;//所属商家
  16. private String sourceId;//抓取数据的来源id
  17. @TableField(exist = false)
  18. private Category category;//所属分类 使用resultmap的assocation处理
  19. @TableField(exist = false)
  20. private Seller seller;//所属商家 使用resultmap的assocation处理
  21. @TableField(exist = false)
  22. private List<RouteImg> routeImgList;//商品详情图片列表,关联属性,mybatis plus不能查,需要配置resultmap使用resultmap的collection处理
  23. }

上述方法对jpa和mybatis以及mybatis plus均适用

不过值得一提的是,这个在实现删除的操作的时候,是没有任何提示的,当然可以自己写一个重定向的前端页面。我一开始考虑的是用ajax来进行数据的传输,这样也可以在上方给出一些提示,但是过程有些小复杂,而且我对ajax也不熟悉,于是乎放弃。 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/1009364
推荐阅读
相关标签
  

闽ICP备14008679号