这两天看了一下树表的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这个表,下面给出报错信息:
### 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
卧槽,竟然说没有默认值!!!可以看一下前端表单提交的情况:
实际上插入数据时候缺少category_id这个字段,而category_id这个字段又不能为空,所以出现如下这种情况:
咱们在来看看sys_product这个表的数据插入情况,如图下
可以看到,插入数据的时候并没有加product_id这个字段。但是没有报错。这是因为有auto_increment这个关键字。
后面查阅一下auto_incrment这个关键字的含义才明白什么意思:
最后看看ass_category这个表,有auto_incrment这个关键字,但这个表插入还是报错,这是为啥呢?
我自己测试了一下,但发现没有问题,估计是楼主的ruoyi版本,前端代码的处理逻辑不一样。
这里看看我这个若依版本的前端代码:
用户点新增按钮或者修改按钮时,会有如下的操作:
另外用户在点击确定提交时,若依把新增和修改的对话写成共用的了,我也是半天没看不明白,后面发现,当点击修改操作时,拿到当前这一条记录的id,向后台发起了一次请求,然后返回这条数据对应的response.data赋值给this.form。于是当我们提交的时候,this.form里有数据的就是修改操作,没有数据的就是新增操作了。