当字段为空时,使用MyBatis添加默认值

时间:2015-06-23 12:27:33

标签: java spring mybatis

当我的字段为空时,我想从数据库中插入默认值。我使用的是Oracle数据库。

CREATE TABLE "EMPLOYEE" 
   ("COL1" VARCHAR2(800) NOT NULL ENABLE, 
    "COL2" VARCHAR2(100) DEFAULT NOT NULL 'toto', 
    CONSTRAINT "PK_EMPLOYEE" PRIMARY KEY ("COL1")

使用简单的SQL请求,我们可以写:

insert into EMPLOYEE(COL1,COL2) values ('titi', default)

如何在Spring中使用注释MyBatis执行此操作?我必须创建一个HandlerType?

2 个答案:

答案 0 :(得分:2)

在mapper XML中,动态构建SQL(在非null时添加col2列和值):

insert into employee (col1<if test="col2 != null">, col2</if>) 
values (#{COL1}<if test="col2 != null">, #{col2}</if>)
编辑:由于注释中的值必须是常量,我以前认为动态SQl在注释中是不可能的,但我在这里找到了一个技巧:How to use dynamic SQL query in MyBatis with annotation(how to use selectProvider)?并自己检查。

要将动态SQL用于注释,请使用“script”标记将其包围:

@Insert("<script>insert into employee (col1<if test='col2 != null'>, col2</if>) 
    values (#{COL1}<if test='col2 != null'>, #{col2}</if>)</script>")

在测试中,只需转义双引号“或用简单的引号替换它们

答案 1 :(得分:1)

如果省略insert语句的colum定义中的COL2,它应该可以工作。因为DB识别出新行没有值,它将应用create table语句中的默认值。

你尝试过这样的事吗?

public interface EmployeeDAO {
   String INSERT = "insert into employee (col1) values (#{COL1})";

   @Insert(INSERT)
   public int insertDefault(PersonDO p) throws Exception;
}