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>
1
gzk329 OP ```
[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 标签的话是可以查出来的 就是查出来的雇员对象里边的经理信息没有了 |
2
gzk329 OP 还有两张表如果有同名的列
比如 a 表有一列 id b 表也有一列也叫 id mybatis 里边该怎么区分 除了起别名? |
3
luhe 2020-09-09 18:03:00 +08:00
是 List<Employee>吧
|
4
wysnylc 2020-09-09 18:04:51 +08:00
真不怕 N+1 啊
|
5
gzk329 OP @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> ``` |
6
mmdsun 2020-09-09 18:58:01 +08:00 via Android
不如单表查,然后手动循环查。
mybatis 一对多关联基本没人用 虽然有一二级缓存但本质还是 n+1 致命的是还会导致某些分页插件计算不准。 jpa 这种一对多关联的 idea 可以自动生成。 |
7
Jrue0011 2020-09-10 15:49:45 +08:00
这循环引用。。。或许是你的 association 标签没有指定属性 javaType="com.gzk.pojo.Manager"
|