2014-11-17 5 views
1

Я использую myBatis 3.2.x и запустить в сценарий, когда мне нужно сделать несколько вставок таблицы в одной поездке базы данных,Как вызвать многопользовательскую вставку в myBatis mapper?

мне было интересно, если я могу создать мастер INSERT SQL сопоставителя файл, который будет вызывать эти мульти табличные вставки и сохранить мои сетевые поездки

Я поглощаю объекты JSON с сервера EMS, и мое время поворота немного выше, чем требуется.

Все предложения и подсказки приветствуются.

Благодаря VR

+0

Разрешено использовать другие объекты или отсортировать список? –

+0

Вы управляете вводом элементов в список А, если это так, то при вводе вы можете проверить наличие дубликатов. – SonalKhodiyar

+0

Используйте 'Set '. –

ответ

3

Использование Collections.sort() для сортировки и использовать простой для цикла, чтобы поймать двойников, например:

Collections.sort(myList); 
A previous = null; 
for (A elem: myList) { 
    if (elem.compareTo(previous) == 0) { 
     System.err.println("Duplicate: "+elem); 
    } 
    previous = elem; 
} 
+0

Не будет ли этот отчет трехкратно два раза и т. д.? –

+0

Спасибо Gabor за указание на это: –

+0

Не было указано, как сообщать о нескольких повторениях. Если вы хотите сообщить об этом только один раз, вы можете добавить «предыдущий предыдущий» и пропустить отчет, если предыдущий предыдущий == предыдущий == текущий. –

2

Предполагая, что Сопоставимые согласуется с реализацией РАВНО, вы может использовать Set. Вы можете добавить каждый элемент в Set с помощью Set.add (..) и использовать возвращаемое значение add, чтобы определить, было ли значение уже присутствовало в Set и создать либо Set, либо List для возврата.

Примечание. Если вам нужно, чтобы каждый дубликат возвращался только один раз, вы можете изменить возвращаемый список на набор.

List<A> duplicates(List<A> myList) { 

    Set<A> s = new HashSet<A>(); 
    List<A> duplicates = new ArrayList<A>(); // change to using a Set if you want to report each duplicate item only once. 
    for (A item: myList) { 
    if (!s.add(item)) { 
     duplicates.add(item); 
    } 
    } 
    return duplicates; 
} 
1

Усовершенствованный вариант с помощью сортировки (сообщить о повторяющихся элементов только один раз, я полагаю, нет null значения в списке):

Collections.sort(myList); 
A previous = null, elem = null; 
for (java.util.Iterator<A> it = myList.iterator; it.hasNext(); elem = it.next()) { 
    if (elem.compareTo(previous) == 0) { 
     System.err.println("Duplicate: "+elem); 
     while (it.hasNext() && (elem = it.next()).compareTo(previous)) { 
      //loop through other values 
     } 
    } 
    previous = elem; 
} 

версия с использованием SortedSet (вероятно, это быстрее, немного): и скорректировано то же самое

SortedSet<A> set = new TreeSet<>(), duplicates = new TreeSet<>(); 
for (A a: myList) { 
    if (!set.add(a)) { 
     duplicates.add(a); 
    } 
} 
return duplicates;//or for (A a: duplicates) System.println("Duplicate: " + a); 
+1

должно быть, если (! Set.add (a))? – kiruwka

+0

Спасибо, второй позаботился обо всех моих сценариях;) –

+0

Обновлен код, чтобы отразить то же самое спасибо Киру! –

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