如何在myBatis映射器中调用多表插入?

时间:2014-11-17 20:54:15

标签: java spring jdbc mybatis

我正在使用myBatis 3.2.x并且遇到了我需要在一次数据库旅行中执行多个表插入的场景,

我想知道我是否可以创建一个主INSERT sql映射器文件来调用这些多表插入并节省网络旅行

我正在使用来自EMS服务器的JSON对象,而且我的周转时间比所需要的要高一些。

欢迎提供所有建议和提示。

由于 VR

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

假设Comparable与equals实现一致,您可以使用Set。您可以使用Set.add(..)将每个元素添加到Set中,并使用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;
 }

答案 2 :(得分: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);