mysql与mybatis 结合的大坑之列设为 not null

我们在设计表时,总喜欢设计某列有个默认值,然后再设为 not null 

比如表 person 有两个列 

name varchat(20) not null default ''

sex int not null default 1

但这种设计有个大坑,就是在插入的时候,插入的实体属性的值为nul ,那么插入的SQL就是这样的 

insert into person  (name,sex) value ('张三',null);

当这个SQL执行时候,我们以为mysql 会把 null  转换成我们的默认值,但结果是直接报错,因为这条SQL的意思就是要把 null 插入。

那么要怎么样才能把属性值为null的实体插入呢,其实也很简单,就是当发现属性值为null时,我们就在SQL看去掉该属性所对应的列 。

如上面SQL改为如下,则可以成功插入,并且为null 的列会使用设置的默认值

insert into person  (name) value ('张三');

其实这个坑也使用的ORM框架有很大关系,有些会帮处理这种情况,但有些不会,比如 mybaties 就不会帮你处理这种情况。所以当mysql与mybatis结合时,表的设计与SQL写法一定要注意。

猜你喜欢

转载自my.oschina.net/u/2356378/blog/1503201