这两天看了一下树表的crud,然后想找个教程看看,就到网上找俩例子,然后开始我的踩坑之旅。


首先,我们先看一下上面俩个链接的建表语句:

CREATE TABLE `product_category` (
  `category_id` char(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类id',
  `parent_id` char(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '上级分类的编号:0表示一级分类',
  `category_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称',
  `level` tinyint(1) DEFAULT NULL COMMENT '分类级别:0->1级;1->2级',
  `show_status` tinyint(1) DEFAULT NULL COMMENT '显示状态:0->不显示;1->显示',
  `sort` int DEFAULT '0' COMMENT '排序',
  `icon` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '图标',
  `description` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '描述',
  PRIMARY KEY (`category_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='商品分类表';
drop table if exists `ass_category`;
create table `ass_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
  `parent_id` int(11) NOT NULL COMMENT '父级id',
  `name` varchar(50) NOT NULL COMMENT '名称',
  `sort` int(11) DEFAULT NULL COMMENT '排序',
  `description` varchar(200) DEFAULT NULL COMMENT '描述',
  `status` tinyint(1) DEFAULT 0 COMMENT '数据状态',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

然后咱们在看一下若依官方文档的建表语句:

drop table if exists sys_product;
create table sys_product (
  product_id        bigint(20)      not null auto_increment    comment '产品id',
  parent_id         bigint(20)      default 0                  comment '父产品id',
  product_name      varchar(30)     default ''                 comment '产品名称',
  order_num         int(4)          default 0                  comment '显示顺序',
  status            char(1)         default '0'                comment '产品状态(0正常 1停用)',
  primary key (product_id)
) engine=innodb auto_increment=1 comment = '产品表';

我这里测试了product_category这个表,下面给出报错信息:

若依中的TreeSelect_ci

若依中的TreeSelect_若依中的TreeSelect_02

### Error updating database. Cause: java.sql.SQLException: Field 'category_id' doesn't have a default value ### The error may exist in file [E:\RuoYi-Cloud-master\ruoyi-test\target\classes\mapper\test\TestCategoryMapper.xml] ### The error may involve com.ruoyi.test.mapper.TestCategoryMapper.insertTestCategory-Inline ### The error occurred while setting parameters ### SQL: insert into test_category ( parent_id, category_name, level, show_status, sort, icon, description ) values ( ?, ?, ?, ?, ?, ?, ? ) ### Cause: java.sql.SQLException: Field 'category_id' doesn't have a default value ; Field 'category_id' doesn't have a default value; nested exception is java.sql.SQLException: Field 'category_id' doesn't have a default value

卧槽,竟然说没有默认值!!!可以看一下前端表单提交的情况:

若依中的TreeSelect_若依中的TreeSelect_03

实际上插入数据时候缺少category_id这个字段,而category_id这个字段又不能为空,所以出现如下这种情况:

若依中的TreeSelect_若依中的TreeSelect_04

咱们在来看看sys_product这个表的数据插入情况,如图下

若依中的TreeSelect_若依中的TreeSelect_05

可以看到,插入数据的时候并没有加product_id这个字段。但是没有报错。这是因为有auto_increment这个关键字。

后面查阅一下auto_incrment这个关键字的含义才明白什么意思:

若依中的TreeSelect_java_06

最后看看ass_category这个表,有auto_incrment这个关键字,但这个表插入还是报错,这是为啥呢?

我自己测试了一下,但发现没有问题,估计是楼主的ruoyi版本,前端代码的处理逻辑不一样。

若依中的TreeSelect_java_07

这里看看我这个若依版本的前端代码:

用户点新增按钮或者修改按钮时,会有如下的操作:

若依中的TreeSelect_ci_08

 

若依中的TreeSelect_ci_09

 

另外用户在点击确定提交时,若依把新增和修改的对话写成共用的了,我也是半天没看不明白,后面发现,当点击修改操作时,拿到当前这一条记录的id,向后台发起了一次请求,然后返回这条数据对应的response.data赋值给this.form。于是当我们提交的时候,this.form里有数据的就是修改操作,没有数据的就是新增操作了。

若依中的TreeSelect_ci_10