2015-06-23 7 views
4

Я хочу вставить значение по умолчанию из базы данных, когда мое поле равно null. Я использую базу данных Oracle.Добавить значение по умолчанию, когда поле равно null с MyBatis

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) 

Как я могу сделать это с аннотациями MyBatis весной? Я должен создать HandlerType?

+0

Да это. лучше, если бы весна могла указать значение по умолчанию, например '@Value (" $ {mongodb.url: 127.0.0.1} ")' – zhuguowei

ответ

1

Он должен работать, если вы опускаете COL2 в своем определении инструкции insert. Поскольку БД распознает, что для новой строки нет значения, и она будет применять значение по умолчанию из оператора create table.

Вы пробовали что-то вроде этого?

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

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

Привет. Я согласен с вами. Но что вы будете делать, если мой столбец COL2 не равен нулю Как вы делаете свою вставку? На самом деле решение должно управлять двумя случаями: вставить значение COL2 (если не null) или установить значение по умолчанию COL2 (если null). – lecogiteur

+0

, если COL2 не равен null, y ou нужно вызвать оператор insert, который использует COL2 и значение, или вам нужно создать манипулятор типа. В обработчике типа вы обрабатываете значение по умолчанию, если соответствующее значение в * DO равно null. – duffy356

1

В картографа XML, строить динамически SQL, (добавить Col2 столбец и значение, если не нулевой):

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

EDIT: поскольку значение в аннотации должно быть постоянным, я имел обыкновение думать, динамический SQL было невозможно в аннотации, но есть трюк, который я нашел здесь: How to use dynamic SQL query in MyBatis with annotation(how to use selectProvider)? и сам проверил.

Чтобы использовать динамический SQL это в аннотации, окружают его с тегами «сценария»:

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

В тестах, просто избежать двойные кавычки "или заменить их простыми кавычки '

+1

Пожалуйста, четко прочитайте вопрос, OP запрашивает решение с помощью аннотаций, пока вы разместили для XML. – Lucky

+0

Спасибо, я попробую это позже. :) – Lucky

Смежные вопросы