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

2020-09-09 17:46:22 +08:00
 gzk329
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>
1791 次点击
所在节点    Java
7 条回复
gzk329
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
2020-09-09 17:56:12 +08:00
还有两张表如果有同名的列
比如 a 表有一列 id
b 表也有一列也叫 id
mybatis 里边该怎么区分
除了起别名?
luhe
2020-09-09 18:03:00 +08:00
是 List<Employee>吧
wysnylc
2020-09-09 18:04:51 +08:00
真不怕 N+1 啊
gzk329
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
2020-09-09 18:58:01 +08:00
不如单表查,然后手动循环查。

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

jpa 这种一对多关联的 idea 可以自动生成。
Jrue0011
2020-09-10 15:49:45 +08:00
这循环引用。。。或许是你的 association 标签没有指定属性 javaType="com.gzk.pojo.Manager"

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/705561

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX