V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gzk329
V2EX  ›  Java

[求助] Mybatis 里边可以使用 collection 标签里边嵌套 association 标签嘛 如果可以的话我这个写的哪里有问题? 详细在文中

  •  
  •   gzk329 · 2020-09-09 17:46:22 +08:00 · 1791 次点击
    这是一个创建于 1540 天前的主题,其中的信息可能已经有所发展或是发生改变。
    public class Employee {
        private String eid;
        private String name;
        private Date startTime;
        private Manager manager;
    
    public class Manager {
        private String mid;
        private String name;
        private Employee employee;
    
    

    数据表结构

    我现在写了一个方法要通过经理的 ID 查出经理 同时一个经理对象里边会有对应的多个雇员,然后雇员对象里边还有对应的经理信息 可以使用 collection 标签里边嵌套 association 标签嘛 如果可以的话我这个写的哪里有问题?

        <select id="getEmployeeByManagerId" resultMap="managerMap">
            select * from
            employee e, manager m
            where m.id = e.mid
            and m.id = #{id};
        </select>
        <resultMap id="managerMap" type="com.gzk.pojo.Manager">
            <result property="mid" column="id"/>
            <result property="name" column="name"/>
            <collection property="employee" ofType="com.gzk.pojo.Employee">
                <result property="eid" column="id"/>
                <result column="name" property="name"/>
                <result property="startTime" column="startTime"/>
                <association property="manager" column="mid" >
                    <result column="id" property="mid"/>
                    <result property="name" column="name"/>
                </association>
            </collection>
        </resultMap>
    </mapper>
    
    7 条回复    2020-09-10 15:49:45 +08:00
    gzk329
        1
    gzk329  
    OP
       2020-09-09 17:50:37 +08:00
    ```
    [Manager(mid=051b89f3b6bd45aea71252ed16f1e5d0, name=赵六, employee=Employee{eid='051b89f3b6bd45aea71252ed16f1e5d0', name='赵六', startTime=Wed Sep 02 15:08:56 CST 2020, manager=null}),
    Manager(mid=3aa1491a4adb47f89b0f7dab804bd9d9, name=李四, employee=Employee{eid='3aa1491a4adb47f89b0f7dab804bd9d9', name='李四', startTime=Sun Aug 02 15:08:47 CST 2020, manager=null})]
    ```
    如果去掉 association 标签的话是可以查出来的 就是查出来的雇员对象里边的经理信息没有了
    gzk329
        2
    gzk329  
    OP
       2020-09-09 17:56:12 +08:00
    还有两张表如果有同名的列
    比如 a 表有一列 id
    b 表也有一列也叫 id
    mybatis 里边该怎么区分
    除了起别名?
    luhe
        3
    luhe  
       2020-09-09 18:03:00 +08:00
    是 List<Employee>吧
    wysnylc
        4
    wysnylc  
       2020-09-09 18:04:51 +08:00
    真不怕 N+1 啊
    gzk329
        5
    gzk329  
    OP
       2020-09-09 18:10:20 +08:00
    @luhe 是的 这个我已经改好了 但是不知道怎么读出经理信息

    ```
    [Manager(mid=8179d370bff14f5b996023fce00745de, name=李经理, employee=[Employee{eid='051b89f3b6bd45aea71252ed16f1e5d0', name='赵六', startTime=null, manager=null}, Employee{eid='3aa1491a4adb47f89b0f7dab804bd9d9', name='李四', startTime=null, manager=null}])]
    ```

    ```
    <select id="getEmployeeByManagerId" resultMap="managerMap">
    select m.id mid, m.name mName,e.id eid,e.name eName from
    employee e, manager m
    where m.id = e.mid
    and m.id = #{id};
    </select>
    <resultMap id="managerMap" type="com.gzk.pojo.Manager" >
    <result property="mid" column="mid"/>
    <result property="name" column="mName"/>
    <collection property="employee" ofType="com.gzk.pojo.Employee" >
    <result property="eid" column="eid"/>
    <result column="eName" property="name"/>
    <result property="startTime" column="startTime"/>
    <!--<association property="manager" column="mid" >
    <result column="mid" property="id"/>
    <result property="name" column="mName"/>
    </association>-->
    </collection>
    </resultMap>

    ```
    mmdsun
        6
    mmdsun  
       2020-09-09 18:58:01 +08:00 via Android
    不如单表查,然后手动循环查。

    mybatis 一对多关联基本没人用 虽然有一二级缓存但本质还是 n+1 致命的是还会导致某些分页插件计算不准。

    jpa 这种一对多关联的 idea 可以自动生成。
    Jrue0011
        7
    Jrue0011  
       2020-09-10 15:49:45 +08:00
    这循环引用。。。或许是你的 association 标签没有指定属性 javaType="com.gzk.pojo.Manager"
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5532 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 06:54 · PVG 14:54 · LAX 22:54 · JFK 01:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.