collection 订阅
Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。 展开全文
Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
信息
释义 
Collection 表示一组对象
相    关
接口通常用来传递 collection
中文名
COLLECTION
属    性
层次结构 中的根接口
COLLECTION基本信息
JDK不提供此接口的任何直接实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。包 (bag) 或多集合 (multiset)(可能包含重复元素的无序 collection)应该直接实现此接口。所有通用的 Collection 实现类(通常通过它的一个子接口间接实现 Collection)应该提供两个“标准”构造方法:一个是 void(无参数)构造方法,用于创建空 collection;另一个是带有 Collection 类型单参数的构造方法,用于创建一个具有与其参数相同元素新的 collection。实际上,后者允许用户复制任何 collection,以生成所需实现类型的一个等效 collection。尽管无法强制执行此约定(因为接口不能包含构造方法),但是 Java 平台库中所有通用的 Collection 实现都遵从它。此接口中包含的“破坏性”方法,是指可修改其所操作的 collection 的那些方法,如果此 collection 不支持该操作,则指定这些方法抛出 UnsupportedOperationException。如果是这样,那么在调用对该 collection 无效时,这些方法可能,但并不一定抛出 UnsupportedOperationException。例如,如果要添加的 collection 为空且不可修改,则对该 collection 调用 addAll(Collection) 方法时,可能但并不一定抛出异常。一些 collection 实现对它们可能包含的元素有所限制。例如,某些实现禁止 null 元素,而某些实现则对元素的类型有限制。试图添加不合格的元素将抛出一个未经检查的异常,通常是 NullPointerException 或 ClassCastException。试图查询是否存在不合格的元素可能抛出一个异常,或者只是简单地返回 false;某些实现将表现出前一种行为,而某些实现则表现后一种。较为常见的是,试图对某个不合格的元素执行操作且该操作的完成不会导致将不合格的元素插入 collection 中,将可能抛出一个异常,也可能操作成功,这取决于实现本身。这样的异常在此接口的规范中标记为“可选”。由每个 collection 来确定其自身的同步策略。在没有实现的强烈保证的情况下,调用由另一进程正在更改的 collection 的方法可能会出现不确定行为;这包括直接调用,将 collection 传递给可能执行调用的方法,以及使用现有迭代器检查 collection。Collections Framework 接口中的很多方法是根据 equals 方法定义的。例如,contains(Object o) 方法的规范声明:“当且仅当此 collection 包含至少一个满足 (o==null e==null :o.equals(e)) 的元素 e 时,返回 true。”不 应将此规范理解为它暗指调用具有非空参数 o 的 Collection.contains 方法会导致为任意的 e 元素调用 o.equals(e) 方法。可随意对各种实现执行优化,只要避免调用 equals 即可,例如,通过首先比较两个元素的哈希码。(Object.hashCode() 规范保证哈希码不相等的两个对象不会相等)。较为常见的是,各种 Collections Framework 接口的实现可随意利用底层 Object 方法的指定行为,而不管实现程序认为它是否合适。
收起全文
精华内容
下载资源
问答
  • Collection

    千次阅读 2019-08-14 17:07:00
    1 /** 2 * - **集合**:集合是java中提供的一种容器,可以用来存储多个数据。 3 * 4 * 集合和数组既然都是容器,它们有啥区别呢? ...6 * - 数组的长度是固定的。...7 * - 数组中存储的是同一类型的元素,可以存储基本...
    1     /**
    2      * - **集合**:集合是java中提供的一种容器,可以用来存储多个数据。
    3      *
    4      * 集合和数组既然都是容器,它们有啥区别呢?
    5      *
    6      * - 数组的长度是固定的。集合的长度是可变的。
    7      * - 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
    8      * */

     

            Collection<String> coll = new ArrayList<>();
            coll.add("小李广");
            coll.add("扫地僧");
            coll.add("石破天");
    
            System.out.println(coll);
            System.out.println(coll.contains("扫地僧"));
            coll.remove("小李广");
            System.out.println(coll);
            System.out.println(coll.size());
    
            Object[] objects = coll.toArray();
            for (int i = 0; i <objects.length ; i++) {
                System.out.println(objects[i]);
            }
            coll.clear();
            System.out.println(coll);
            System.out.println(coll.isEmpty());

     

     1     /**
     2      * - **迭代**:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。
     3      *
     4      * Iterator接口的常用方法如下:
     5      *
     6      * - `public E next()`:返回迭代的下一个元素。
     7      * - `public boolean hasNext()`:如果仍有元素可以迭代,则返回 true。
     8      * */
     9 
    10     public static void main(String[] args) {
    11         /**
    12          * Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:
    13          *
    14          * ![](img\迭代器原理图.bmp)
    15          *
    16          * 在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,
    17          * 当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,
    18          * 当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。
    19          * */
    20         Collection<String> coll = new ArrayList<>();
    21 
    22         coll.add("传唤");
    23         coll.add("网线");
    24 
    25         Iterator<String> it = coll.iterator();
    26         while (it.hasNext()){
    27             String next = it.next();
    28             System.out.println(next);
    29         }
    30     }

     

        /**
         * 增强for循环(也称for each循环)是**JDK1.5**以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。
         *
         * 格式:
         *
         * ```java
         * for(元素的数据类型  变量 : Collection集合or数组){
         *       //写操作代码
         * }
         * ```
         *
         * 它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。
         * */
    
        public static void main(String[] args) {
            int[] array = {13, 23, 32, 3214, 4213};
            for(int a : array){
                System.out.println(a);
            }
        }

     

    转载于:https://www.cnblogs.com/xiaoxiaolulu/p/11353227.html

    展开全文
  • JVM:Garbage Collection GC

    万次阅读 2020-03-02 20:46:13
    Garbage Collection GC

    Garbage Collection GC

    不管去哪里,都要记得这个图咯。今天重点看看GC垃圾回收是怎么搞的😄😄😄
    由于回收的主要区域是堆内存,我们需要重新看看堆内存到底是怎么样子的

    堆内存🌲


    在这里插入图片描述

    • Young Generation Survivor Space:新生代,包括了Eden Space ,S0,S1区域
      💰Eden Space:最开始的对象都分配在这里,静静等待着垃圾回收
      💰S0:即Survivor0 space,当Eden Space垃圾回收后存活的对象放到这里来
      💰S1:当S0区域的对象逃过了GC的魔掌就会移到S1区域
    • Old Generation tenured:老年代,或者旧生代,主要是Young Generation的对象还没有被回收就会移到这个老年代来了。
    • Permanent Generation:俗称永久代,JDK1.8里面已经把它从堆区域移除了,成为了方法区,用来存储常量,类信息等等

    垃圾回收流程📖


    在这里插入图片描述

    这个就和上面介绍的差不多,总之就是Eden->S0->S1->Tenured
    说的那么多,好像说的那么爽,结果没有一个点能够卡得上,到底什么是垃圾啊

    什么是垃圾👀


    主要有两种方式来判别是不是垃圾:引用计数法和可达性分析。java采用了可达性分析法
    引用计数法

    引用计数法:引用计数算法是垃圾回收器中的早起策略,在这种方法中,堆中的每个对象实例都有一个引用计数器,点一个对象被创建时,且该对象实例分配给一个变量,该变量计数设置为1 ,当任何其他变量赋值为这个对象的引用时,计数加1 ,(a=b ,则b引用的对象实例计数器+1)但当一个对象实例的某个引用超过了生命周期或者被设置为一个新值时,对象实例的引用计数器减1,任何引用计数器为0 的对象实例可以当做垃圾收集。 当一个对象的实例被垃圾收集是,它引用的任何对象实例的引用计数器减1.
    但是呢,引用计数有个致命的问题,就是不能解决循环引用的实例,比如A引用了B,B引用了A,连个计数永远不为0,那么两个对象永远不会回收

    可达性分析

    可达性分析:这是java里面采用的方法。该方法的基本思想是通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的,不过要注意的是被判定为不可达的对象不一定就会成为可回收对象。被判定为不可达的对象要成为可回收对象必须至少经历两次标记过程,如果在这两次标记过程中仍然没有逃脱成为可回收对象的可能性,则基本上就真的成为可回收对象了。
    在这里插入图片描述
    呐,就从这个图的GC Root开始找,根据离散数学里面的图一样,有很多的GC Root
    GC Root:
    1.虚拟机栈中引用的对象(本地变量表)
    2.方法区中静态属性引用的对象
    3. 方法区中常量引用的对象
    4.本地方法栈中引用的对象(Native对象)

    关于这种引用有四种,强引用,软引用,弱引用,虚引用

    强引用: 是java中最强的引用,可以直接访问指向的对象,有点儿像C里面的指针,但是它宁愿抛出OOM,也不愿意去回收,所以可能会导致内存泄露。
    软引用: 仅次于强引用,当内存资源使用紧张时才会去回收
    弱引用: 弱引用是一种比软引用较弱的引用类型。在系统GC时,只要发现弱引用,不管系统堆空间是否足够,都会将对象进行回收。在java中,可以用java.lang.ref.WeakReference实例来保存对一个Java对象的弱引用。
    虚引用: 当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在垃圾回收后,销毁这个对象,将这个虚引用加入引用队列。程序可以通过判断引用队列中是否已经加入了虚引用,来了解被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的内存被回收之前采取必要的行动。

    finalize方法


    在这里插入图片描述
    在这里插入图片描述
    引用了别人的图片:看看

    在这里插入图片描述

    垃圾回收算法🦢


    1⃣️.Mark-Sweep(标记-清除)算法

    在这里插入图片描述

    分为了两个阶段:第一个阶段就是将要回收的对象标记。第二个阶段就是将标记的对象回收。看似很简单,但是很大的问题,就是内存碎片了。

    在这里插入图片描述

    2⃣️.Copying(复制)算法

    可以说,是为了解决上面的内存碎片的问题把。把堆内存分成了两部分,一部分是分配对象,另一部分留着复制。当要回收的时候,先将还存活的对象复制到另一半,然后一次性清除原来的一半。但是呢,这样我们能够使用的内存就只有一半了,另一半根本使用不了,只能留着复制,而且每次复制都移动那么多对象,效率明显会下降。

    在这里插入图片描述

    3⃣️.Mark-Compact(标记-整理)算法

    这个方法是为了解决Copy算法内存使用问题,它是进行垃圾回收后,再把存活的对象往一边移动,这样子就可以使用整个内存了

    在这里插入图片描述

    4⃣️.Generational Collection(分代收集)算法

    这是大部分JVM常用的一种垃圾回收算法。首先要看到上面那个堆Heap区域的图,所以需要先明白Heap区域分成了Young Generation(Eden,S0,S1),Old Generation。
    可以看到在Young Generation,将内存区域分成了几块,很明显就可以使用Copy算法,也就是说Generational Collection采用了上面三种的某几种算法,结合而成的。在Young Generation,这样子在Eden区域的存活的对象复制到S0,然后将Eden区域给清除掉。同理S0存活的对象复制到S1,然后将S0清除。S1存活的复制到老年代Old Generation ,然后清除S1.

    在这里插入图片描述

    Young Generation触发的GC叫做Minor GC,发生频率比较高,而Old Generation叫做Major GC即Full GC,一般发生频率比较低,因为都是存活率很久的对象

    在这里插入图片描述

    垃圾收集器🆚


    主要的垃圾收集器有四种:

    • Serial Garbage Collection:串行垃圾回收器
    • Parallel Garbage Collection:并行垃圾回收器
    • CMS Garbage Collection:CMS垃圾回收其
    • G1 Garbage Collection:G1垃圾回收器
      在这里插入图片描述

    Serial Garbage Collection:一次只开一个线程回收,在垃圾回收时会停止所有的应用程序线程,不然怎么会叫串行呢,对吧,看上图最左边,应用程序线程停止了,只有垃圾回收线程在执行。-XX:+UseSerialGCJVM参数以使用串行垃圾收集器。
    Parallel Garbage Collection:上图中间的那个,多个线程执行垃圾回收,是JVM默认的方式,但是也会暂停其他应用程序线程
    CMS:并发标记清除(CMS)垃圾收集器使用多个线程扫描堆内存,以标记要逐出的实例,然后清除标记的实例。CMS垃圾收集器只保存以下两种情况下的所有应用程序线程:

    • 在Old Generaton空间中标记引用对象时。
    • 2:如果在执行垃圾收集时堆内存发生并行更改。
      与并行垃圾收集器相比,CMS收集器使用更多的CPU来确保更好的应用程序吞吐量。如果我们可以分配更多的CPU以获得更好的性能,那么CMS垃圾收集器是优于并行收集器的首选。打开XX:+USeParNewGC JVM参数以使用CMS垃圾收集器
      G1 Garbage Collection:G1垃圾收集器用于大型堆内存区域。它将堆内存分成多个区域,并在这些区域内并行进行收集。G1也会在回收内存后压缩空闲堆空间。但是CMS垃圾收集器压缩了stop-the-world(STW)情况下的内存。G1收集器首先根据大多数垃圾对区域进行优先级排序。打开–XX:+UseG1GC JVM参数以使用G1垃圾收集器。
    虽然说分成了上面几种,但是呢,根据老年代,新生代又会有不同的使用方式。下图中,Young Generation和Tunured Generation的连线代表可以搭配使用的

    在这里插入图片描述

    1:Serial收集器(复制Copy算法)

    单线程串行运行,会暂停应用程序。算是历史很悠久的一种收集器了。

    在这里插入图片描述

    2:ParNew收集器(复制Copy算法)

    其实就是上面Serial的多线程版本,除了GC线程在多个CPU上同时执行外,其他和Serial没啥区别,也会要暂停其他应用程序

    在这里插入图片描述

    3:Parallel Scavenge(复制Copy算法)

    与吞吐量关系密切,故也称为吞吐量优先收集器。特点:属于新生代收集器也是采用复制算法的收集器,又是并行的多线程收集器(与ParNew收集器类似)。
    该收集器的目标是达到一个可控制的吞吐量。还有一个值得关注的点是:GC自适应调节策略(与ParNew收集器最重要的一个区别)

    GC自适应调节策略:Parallel Scavenge收集器可设置-XX:+UseAdptiveSizePolicy参数。当开关打开时不需要手动指定新生代的大小(-Xmn)、Eden与Survivor区的比例(-XX:SurvivorRation)、晋升老年代的对象年龄(-XX:PretenureSizeThreshold)等,虚拟机会根据系统的运行状况收集性能监控信息,动态设置这些参数以提供最优的停顿时间和最高的吞吐量,这种调节方式称为GC的自适应调节策略。

    Parallel Scavenge收集器使用两个参数控制吞吐量:

    • XX:MaxGCPauseMillis 控制最大的垃圾收集停顿时间
    • XX:GCRatio 直接设置吞吐量的大小。

    4:Serial Old收集器(标记整理算法)

    在老年代使用的,也是单线程的。使用场景:
    • 在JDK1.5以及以前的版本中与Parallel Scavenge收集器搭配使用。
    • 作为CMS收集器的后备方案,在并发收集Concurent Mode Failure时使用。
      在这里插入图片描述

    5:Parallel Old 收集器(标记-整理算法)

    是Parallel Scavenge收集器的老年代版本。
    特点:多线程,采用标记-整理算法。
    应用场景:注重高吞吐量以及CPU资源敏感的场合,都可以优先考虑Parallel Scavenge+Parallel Old 收集器。

    Parallel Scavenge/Parallel Old收集器工作过程图:
    在这里插入图片描述

    6:CMS收集器(标记清除算法)

    一种以获取最短回收停顿时间为目标的收集器。
    特点:基于标记-清除算法实现。并发收集、低停顿。
    应用场景:适用于注重服务的响应速度,希望系统停顿时间最短,给用户带来更好的体验等场景下。如web程序、b/s服务。
    CMS收集器的运行过程分为下列4步:

    • 初始标记:标记GC Roots能直接到的对象。速度很快但是仍存在Stop The World问题。
    • 并发标记:进行GC Roots Tracing 的过程,找出存活对象且用户线程可并发执行。
    • 重新标记:为了修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录。仍然存在Stop The World问题。
    • 并发清除:对标记的对象进行清除回收。

    CMS收集器的内存回收过程是与用户线程一起并发执行的。
    在这里插入图片描述

    CMS收集器的缺点:

    • 对CPU资源非常敏感。
    • 无法处理浮动垃圾,可能出现Concurrent Model Failure失败而导致另一次Full GC的产生。
    • 因为采用标记-清除算法所以会存在空间碎片的问题,导致大对象无法分配空间,不得不提前触发一次Full GC。

    7:G1收集器

    特点如下:

    • 并行与并发:G1能充分利用多CPU、多核环境下的硬件优势,使用多个CPU来缩短Stop-The-World停顿时间。部分收集器原本需要停顿Java线程来执行GC动作,G1收集器仍然可以通过并发的方式让Java程序继续运行。
    • 分代收集:G1能够独自管理整个Java堆,并且采用不同的方式去处理新创建的对象和已经存活了一段时间、熬过多次GC的旧对象以获取更好的收集效果。
    • 空间整合:G1运作期间不会产生空间碎片,收集后能提供规整的可用内存。
    • 可预测的停顿:G1除了追求低停顿外,还能建立可预测的停顿时间模型。能让使用者明确指定在一个长度为M毫秒的时间段内,消耗在垃圾收集上的时间不得超过N毫秒。
      在这里插入图片描述
    上面简单介绍了一些垃圾回收的基础,后面会详细的分析垃圾收集器并配置实操
    展开全文
  • COllection介绍和Collection排序

    千次阅读 2017-07-30 23:22:35
    一、集合:集合主要分为Collection,Map 二、Collection接口 1、List接口:大量连续有序的元素。 ArrayList:基于动态数组的实现。是线程不同步的,如果需要让其线程同步操作,可以使用Collection....
    一、集合:集合主要分为Collection,Map

    二、Collection接口
    1、List接口:大量连续有序的元素
    ArrayList:基于动态数组的实现。是线程不同步的,如果需要让其线程同步操作,可以使用Collection.synchronized(list)对列表实现同步。容量不足时,自动增长容量一半。
    Vector:基于动态数组的实现。是线程同步的。容量不足时,容量自动翻倍。
    LinkedList:基于链表的实现,元素存储不连续。通过元素的指针进行连接。是线程不安全的。
    2、Set接口:存储大量无序的元素。Set集合不允许出现重复元素。相当于数学的集合概念
    HashSet:基于Hash表的顺序进行排序。若两个元素的Hash值一样,会产生覆盖。
    TreeSet:基于元素的自然顺序进行排序(元素实现Comparable接口)实现排序。或者通过Comparator接口完成元素的存储。

    三、Map接口:以键值对结构存储元素,一般一个键对应一个值,键不允许重复,但是值可以
    HashMap:允许放入一个空的键或值,基于Hash表的顺序对于映射关系中的键排序。在存储元素是不允许键的重复,但允许值的重复。
    TreeMap:不允许放入空键,基于红黑树的一种映射实现,元素的排序按照键的自然顺序排序(元素必须实现Comparable接口)实现。或者通过Comparator接口完成元素的存储。
     Hashtable:不允许放入空键或值,从老式的Dictionary类继承,新增对Map接口的实现。Hashtable是线程同步的。

    四、Iterator:集合元素迭代器,在进行迭代时候。不要使用集合自带add和remove方法。需要使用Iterator的remove方法。
    ListIterator:动态数组的迭代器。可以反向迭代,但是反向迭代时候需要指针不在最前面。可以在迭代时候set,add,remove。
    List list = new ArrayList<String>();
    Iterator it = list.iterator();
    while(it.hasNext){
        String s= it.next();
    }



    五、关于Collection排序
    1、匿名内部类方式
    public static void main(String[] args) {
               ArrayList<String> a = new ArrayList<>();
               a.add("阿玲");
               a.add("刘德华");
               a.add("劉德華");
               a.add("吳為");
               a.add("吴为");
               a.add("喵喵");
               Collections.sort(a, new Comparator<String>() {//Collections是一个在Collection上操作的工具类。可以实现对集合元素的排序
                    @Override
                    public int compare(String o1, String o2) {
                         return Collator.getInstance(Locale.CHINA).compare(o1, o2);//Collator是一个支持简体汉语的比较的抽象类。简单字符串比较可以调用String自带比较方法
                    }
               });
               for (String string : a) {
                    System.out.println(string);
               }
         }
    2、实现Comparator接口方式。然后再调用Collections.sort(List list,new SortMethod( )  )方法
    public class SortMethod implements Comparator<Student> {
         private String type;
         private boolean type1;
         public SortMethod(String type, boolean type1) {
               super();
               this.type = type;
               this.type1 = type1;
         }
         @Override
         public int compare(Student o1, Student o2) {
               int i = 0;
               if (type.equals("id")) {
                    i = o1.getId() - o2.getId();
               } else if (type.equals("name")) {
                    i = o1.getName().compareTo(o2.getName());
               } else if (type.equals("birthday")) {
                    i = o1.getBirthday().compareTo(o2.getBirthday());
               }
               if (type1)
                    return i;
               else {
                    return -i;
               }
         }
    }
    3、需要比较对象继承Compartable接口,并重写CompareTo方法。然后调用Collections.sort(List list)方法
    public class Student implements Comparable<Student>{
         private String name;
         private int id;
         private Date birthday;
         public Student(String name, int id,Date birthday) {
               super();
               this.name = name;
               this.birthday = birthday;
               this.id = id;
         }
         @Override
         public int compareTo(Student o) {          
               return this.birthday.compareTo(o.birthday);
         }    
    }

    展开全文
  • 【Mybatis】collection解决一对多关联查询

    万次阅读 热门讨论 2018-03-06 21:39:53
    接下来小编将介绍collection标签的相关知识,包括嵌套查询和分段查询两种方式。现在有员工和部门两张表,前两篇文章介绍的都是根据员工查部门,本篇文章介绍由部门查所有员工首先请参照上上篇中步骤1,2,3 , 4,...
    在上上篇中我们用级联属性的方式把数据查出来封装到Employee中,还有另一种方式实现数据的封装。
    接下来小编将介绍collection标签的相关知识,包括嵌套查询和分段查询两种方式。
     

    现在有员工和部门两张表,前两篇文章介绍的都是根据员工查部门,本篇文章介绍由部门查所有员工

     

    首先请参照上上篇中步骤1,2,3 , 4,此处从第5步开始

     

    一、嵌套查询

    5.新增DepartmentMapper.java接口方法

    public interface DepartmentMapper {	
    	public Department getDeptByIdPlus(Integer id);
    }

    6.新增DepartmentMapper.xml文件,配置信息如下

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.atguigu.mybatis.dao.DepartmentMapper">
    
    	<!-- collection嵌套结果集的方式,定义关联的集合类型元素的封装规则-->
    	
    	<!-- 嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则 -->
    	<resultMap type="com.atguigu.mybatis.bean.Department" id="MyDept">
    		<id column="did" property="id"/>
    		<result column="dept_name" property="departmentName"/>
    		<!-- 
    		collection定义关联结合类型的属性的封装规则
    		ofType:指定集合里面元素的类型
    		-->
    		<collection property="emps" ofType="com.atguigu.mybatis.bean.Employee">
    			<!-- 定义这个集合中元素的封装规则 -->
    			<id column="eid" property="id"/>
    			<result column="last_name" property="lastName"/>
    			<result column="email" property="email"/>
    			<result column="gender" property="gender"/>
    		</collection>
    	
    	</resultMap>
    	
    	<!-- public Department getDeptByIdPlus(Integer id); -->
    	<select id="getDeptByIdPlus" resultMap="MyDept" >
    		SELECT
    			d.id did,
    			d.dept_name dept_name,
    			e.id,
    			e.last_name last_name,
    			e.email email,
    			e.gender gender
    		FROM
    			tbl_dept d
    		LEFT JOIN tbl_employee e ON d.id = e.d_id
    		WHERE
    			d.id = #{id}
    	</select>
    	
    </mapper>

    7.新增测试方法

    	@Test
    	public void test06() throws IOException{
    		
    		SqlSessionFactory sqlSesssionFactory = getSqlSesssionFactory();
    		SqlSession openSession = sqlSesssionFactory.openSession();
    		try {
    			DepartmentMapper mapper = openSession.getMapper(DepartmentMapper.class);
    			Department deptByIdPlus = mapper.getDeptByIdPlus(2);
    			System.out.println(deptByIdPlus);
    			System.out.println(deptByIdPlus.getEmps());
    			
    		} finally {
    			openSession.close();
    		}
    	}

    8.控制台信息

     

     

    二、分段查询

    5.新增EmployeeMapperPlus.xml文件,配置信息如下

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.atguigu.mybatis.dao.EmployeeMapperPlus">
    	<select id="getEmpsByDeptId" resultType="com.atguigu.mybatis.bean.Employee">
    	 	select * from tbl_employee where d_id=#{deptId}
    	 </select>
    <mapper/>
    

     

    6.DepartmentMapper.xml文件,配置信息

     

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.atguigu.mybatis.dao.EmployeeMapperPlus">
    	
    <resultMap type="com.atguigu.mybatis.bean.Department" id="MyDeptStep">
    		<id column="id" property="id"/>
    		<id column="dept_name" property="departmentName"/>
    		<collection property="emps"
    			select="com.atguigu.mybatis.dao.EmployeeMapperPlus.getEmpsByDeptId"
    			column="{deptId=id}" fetchType="lazy"></collection>
    </resultMap>
    	<!-- public Department getDeptByIdStep(Integer id); -->
    	<select id="getDeptByIdStep" resultMap="MyDeptStep">
    		select id,dept_name departmentName from tbl_dept where id=#{id}
    	</select>
    
    <mapper/>

     

    7.新增测试方法

    @Test
    	public void test06() throws IOException{
    		
    		SqlSessionFactory sqlSesssionFactory = getSqlSesssionFactory();
    		SqlSession openSession = sqlSesssionFactory.openSession();
    		try {
    			DepartmentMapper mapper = openSession.getMapper(DepartmentMapper.class);
    			Department deptByIdStep = mapper.getDeptByIdStep(1);
    			System.out.println(deptByIdStep);		
    		} finally {
    			openSession.close();
    		}
    	}

    8.控制台信息:分步查询效果

    展开全文
  • collection接口

    千次阅读 2016-12-21 16:23:11
    Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,...
  • Java中的Collection集合以及Collection集合实现类实例

    万次阅读 多人点赞 2018-10-28 17:40:48
    文章目录集合Collection:List集合Collection集合和List集合迭代实例 集合 1、 面向对象语言对事物的描述是通过对象体现,如果想要存储多个对象就需要集合。 2、 数组和集合的区别  a) 长度不同   i. 集合长度可...
  • Collection接口

    2020-11-24 11:49:46
    1、Collection接口: (1)List 有序集合,允许相同元素和null,有下标 LinkedList 非同步,允许相同元素和null,遍历效率低插入和删除效率高 ArrayList 非同步,允许相同元素和null,实现了动态大小的数组,遍历...
  • Collection 集合

    2016-05-09 10:17:44
    Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不...
  • Collection集合框架

    千次阅读 2020-11-12 13:16:06
    Collection是所有集合的顶级接口,里面规定了集合操作元素的相关功能方法集合与数组一样,用于存储一组元素,但是集合又多个不同的实现类来实现不同的数据结构 Collection下面有两个常见的值接口 java.util.List:...
  • Collection接口详解

    万次阅读 2018-05-29 17:00:41
    Collection接口 Collection接口Api一览 为什么重写Iterable接口的iterator方法 Collection Api 详解 Collection接口在Java8中的函数扩展 Iterator 接口 Iterator Api详解 ArrayList的自定义迭代器 List 接口 ...
  • Java Collection Framework : Collection 接口

    千次阅读 2016-10-27 18:58:48
    Java 容器类根接口Collection 的详细描述。
  • Mybatis出现Mapped Statements collection already contains value for 错误原因: 1.mapper中存在id重复的值 2.mapper中的parameterType或resultType为空。 例如:<update id="deleteSchool" parameterType=...
  • Collection和Collections区别

    万次阅读 2019-08-28 14:18:09
    1.Collection: 是集合类的上层接口。本身是一个Interface,里面包含了一些集合的基本操作。 Collection接口时Set接口和List接口的父接口 2.Collections Collections是一个集合框架的帮助类,里面包含一些对...
  • Collection转List

    万次阅读 2017-10-19 09:07:55
    Collection对象转换为List对象
  • collection详解

    千次阅读 2016-08-20 00:32:09
    两个月之前准备软考时,简单的从理论上总结了最常用...本文主要是通过简单的介绍Collection集合,向读者简单阐述各个类的基本定义以及其作用,为后面的学习做一下铺垫。 首先,我们先看一下Collection集合的基
  • Collection集合总结

    千次阅读 2018-08-09 22:20:41
    Collection接口继承体系图  Collection接口常用方法 返回值类型 方法  解释 boolean add(E e) 向列表的尾部添加指定的元素(可选操作) boolean addAll(Collection&lt;? extends E&...
  • 初次一看四个有点相似...Collections是一个集合工具类,本身没有实现Collection接口,而是内部类实现了Collection接口,它的作用就是封装常用的集合操作。 public static void main(String[] args) { ArrayList<In
  • Java Collection接口

    千次阅读 2016-08-13 10:03:12
    在java.util包中提供了一些集合类,常用的有List、Set和Map类,其中List类和Set类继承了Collection接口。这些集合类又称为容器,长度是可变的,数组用来存放基本数据类型的数据,集合用来存放类对象的引用。 List...
  • Collection集合

    万次阅读 2013-07-17 21:02:42
    Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不...
  • Collection框架

    千次阅读 2016-12-08 12:36:11
    Collection,List,ArrayList,LinkedList,Vector(自动增长数组),HashSet,HashMap等. 集合框架中的类主要封装的是典型的数据结构,如动态数组,链表,堆栈,集合,哈希表等. 集合框架类似编程中经常用到的工具类,使得...
  • 了解Collection 和 Collections

    千次阅读 2020-05-03 21:47:36
    Collection 和 Collections区别 java.util.Collection 是一个集合接口(集合类的一个顶级接口)。 它提供了对集合对象进行基本操作的通用接口方法。 Collection接口在Java 类库中有很多具体的实现。 Collection...
  • Error:scalac: Error: scala.collection.mutable.Set.apply(Lscala/collection/Seq;)Lscala/collection/GenTraversable;java.lang.NoSuchMethodError:scala.collection.mutable.Set.apply(Lscala/collection/Seq;)...
  • Collection框架介绍

    千次阅读 2018-05-23 21:17:52
    Collection:List列表,Set集, Map:Hashtable,HashMap,TreeMap Collection 是单列集合List 元素是有序的、可重复有序的 collection,可以对列表中每个元素的插入位置进行精确地控制。可以根据元素的整数...
  • Collection 和 Collections 有什么区别?

    千次阅读 2019-04-30 23:30:39
    Collection 和 Collections 有什么区别? Collection是JDK中集合层次结构中的最根本的接口。定义了集合类的基本方法。源码中的解释: * The root interface in the <i>collection hierarchy</i>. A...
  • Android Java Collection认识

    千次阅读 2020-02-12 16:34:58
    无意间发现xmpp代码中Collection addresses,本着好奇的❤️,查阅发现 List是Collection接口的子接口。 的List接口的实现类 :ArrayList、LinkedList、Stack、CopyOnWriteArrayList List、Set、Queue、Map都指向...
  • Collection和Collections的区别

    万次阅读 多人点赞 2018-11-14 09:22:50
    Collection和Collections的区别
  • mongodb collection相关

    千次阅读 2015-12-25 11:53:35
    mongodb collection相关

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 163,599
精华内容 65,439
关键字:

collection