咱們在設計表時,總喜歡設計某列有個默認值,而後再設爲 not null mysql
好比表 person 有兩個列 sql
name varchat(20) not null default ''mybatis
sex int not null default 1框架
但這種設計有個大坑,就是在插入的時候,插入的實體屬性的值爲nul ,那麼插入的SQL就是這樣的 設計
insert into person (name,sex) value ('張三',null);bat
當這個SQL執行時候,咱們覺得mysql 會把 null 轉換成咱們的默認值,但結果是直接報錯,由於這條SQL的意思就是要把 null 插入。arc
那麼要怎麼樣才能把屬性值爲null的實體插入呢,其實也很簡單,就是當發現屬性值爲null時,咱們就在SQL看去掉該屬性所對應的列 。
如上面SQL改成以下,則能夠成功插入,而且爲null 的列會使用設置的默認值
insert into person (name) value ('張三');
其實這個坑也使用的ORM框架有很大關係,有些會幫處理這種狀況,但有些不會,好比 mybaties 就不會幫你處理這種狀況。因此當mysql與mybatis結合時,表的設計與SQL寫法必定要注意。