zoukankan      html  css  js  c++  java
  • 【串线篇】SQL映射文件-联合查询(完结association+cellection)

    1、级联属性的方式封装查出1-1

    查钥匙的时候顺别把对应的级联的那把锁也查出来

    1)、两个JavaBean,Key里有对应的Lock(private Lock lock;//当前钥匙能开哪个锁;)

    2)、建两张表key表和lock表,key表里加外键

           外键好处,安全性:单纯删key表里的一行记录删不掉,只有删除key表记录才行

    3)、sql语句要对两个表两个相同名字id起别名,

    id  keyname  lockid  “lid”  lockname

    -        -               -         -        -

    方便resultMap自定义封装规则指定返回数据的对应数据库列名

    4)resultMap引用

    2. association标签,mybatis推荐方便(续1)

    表示联合了一个对象

    <association property="lock" javaType="com.atguigu.bean.Lock">

                <!-- 定义lock属性对应的这个Lock对象如何封装 -->

                <id property="id" column="lid"/>

                <result property="lockName" column="lockName"/>

     </association>

    【打印】

    Key keyById = mapper.getKeyById(2);

    System.out.println(keyById);

    Key [id=2, keyName=2号钥匙, lock=Lock [id=2, lockName=2号锁]]

    3. collection标签(一个门人手一把钥匙)1-n

    一个Lock对应一个Key集合(collection自动整成list)

    1)、JavaBean Lock  private List<Key> keys;)

    <!--

            private Integer id;

            private String lockName;

            //查询锁子的时候把所有的钥匙也查出来

            private List<Key> keys;

           

            id  lockName                  kid  keyname     lockid 

            3  303办公室的锁子               3  303钥匙1           3

            3  303办公室的锁子               4  303钥匙2           3

            3  303办公室的锁子               5  303钥匙3           3

          -->

        <resultMap type="com.atguigu.bean.Lock" id="mylock">

            <id property="id" column="id"/>

            <result property="lockName" column="lockName"/>

            <!--

            collection:定义集合元素的封装

                property="":指定哪个属性是集合属性

                javaType:指定对象类型;association

                ofType="":指定集合里面元素的类型

            -->

            <collection property="keys" ofType="com.atguigu.bean.Key">

                <!-- 标签体中指定集合中这个元素的封装规则 -->

                <id property="id" column="kid"/>

                <result property="keyName" column="keyname"/>

            </collection>

        </resultMap>

    【打印】

    与1-1不同的是取出对象后,对其内部list遍历才能得到collection

    Lock lock = mapper.getLockById(3);

                System.out.println(lock);

                System.out.println("所有锁子如下:");

                List<Key> keys = lock.getKeys();

                for (Key key : keys) {

                    System.out.println(key);

                }

    Lock [id=3, lockName=303办公室的锁子]

    所有锁子如下:

    Key [id=3, keyName=303钥匙1]

    Key [id=4, keyName=303钥匙2]

    Key [id=5, keyName=303钥匙3]

  • 相关阅读:
    mysql GROUP_CONCAT 查询某个字段(查询结果默认逗号拼接)
    mysql中find_in_set的使用
    Libev源码分析07:Linux下的eventfd简介
    Libev源码分析06:异步信号同步化--sigwait、sigwaitinfo、sigtimedwait和signalfd
    Nova中的Hook机制
    Python深入:stevedore简介
    Libev源码分析05:Libev中的绝对时间定时器
    Python深入:setuptools简介
    Libev源码分析04:Libev中的相对时间定时器
    Libev源码分析02:Libev中的IO监视器
  • 原文地址:https://www.cnblogs.com/yanl55555/p/11936412.html
Copyright © 2011-2022 走看看