当我的字段为空时,我想从数据库中插入默认值。我使用的是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?
答案 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;
}