【串线篇】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]

原文地址:https://www.cnblogs.com/yanl55555/p/11936412.html