关于MyBatis关联查询
为什么在此处OA项目中,
老师需要(左外)连接部门表?不可以直接select * from employee吗,自动完成关联对象的属性填充?那什么时候需要用(内/外)连接?
我不是很理解为什么如果多表如果有相同字段名,就需要手动配置<association>标签体内的字段映射关系
-----------------------------------------
之前有一个管理系统的项目,有如下实体类:部门;员工(员工中包含部门)
在员工查询语句中并没有(内/外)连接部门表;jsp页面中可以直接用表达式${staff.department.name}直接得到所属部门信息。
下面是DepartmentDao和StaffDao的MyBatis配置文件
<mapper namespace="com.mike.service.dao.DepartmentDao"> <resultMap id="resultMap" type="Department"> <!--主键--> <id property="id" column="id" javaType="Integer"/> <result property="name" column="name" javaType="String"/> <result property="address" column="address" javaType="String"/> </resultMap> <select id="selectAll" resultMap="resultMap"> select * from department </select> </mapper>
<mapper namespace="com.mike.service.dao.StaffDao"> <resultMap id="resultMap" type="Staff"> <!--主键--> <id property="id" column="id" javaType="Integer"/> <result property="account" column="account" javaType="String"/> <result property="did" column="did" javaType="Integer"/> <association property="department" column="did" javaType="Department" select="com.mike.service.dao.DepartmentDao.selectById"/> </resultMap> <select id="selectAll" resultMap="resultMap"> select * from staff </select> </mapper>
正在回答 回答被采纳积分+1
同学你好,
老师需要(左外)连接部门表?不可以直接select * from employee吗,自动完成关联对象的属性填充?那什么时候需要用(内/外)连接?
1、我们组装这个resultMap是为了一次性将Employee对象的属性,包括关联的Department属性,通过一次关联查询映射到位,例如:
如上所示,在resultMap中关联了Department,对应就需要使用关联查询,来连接查询部门表。
内/外连接:
内连接:返回的是表中存在至少一个匹配的数据,那么不匹配的数据肯定就不返回了,所以一般使用内连接是使用内链接可以去除重复记录。
外链接:显示全部数据的是主查询表, 显示部分数据的是关联查询表,对应的左外链接和右外链接,就是主查询表的位置不同。
我不是很理解为什么如果多表如果有相同字段名,就需要手动配置<association>标签体内的字段映射关系
2、因为我们要做联表查询,比如:在同一个结果集中展现e表的sn和d表的sn,为了区分,才将它设置为不同。 (column对应的是结果集的列名,不是原表的。property是对应实体的属性名)
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 323 份
- 解答问题 8263 个
本阶段将带你学习主流框架SSM,以及SpringBoot ,打通成为Java工程师的最后一公里!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星