文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringBoot进行多表查询功能的实现

2024-04-02 19:55

关注

实体类:

Emp 类:


@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
    private int id;
    private String lastname;
    private String email;
    private int gender;
    private int did;
    private Dept dept;
    private Date birth = new Date();
}

Dept类:


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dept {
    private int id;
    private String dname;
}

Mapper接口

EmpMapper:


//这个注解表示这是一个mybatis的mapper类
@Mapper
@Repository
public interface EmpMapper {
    void addEmp(Emp emp);
    void deleteEmp(int id);
    void updateEmp(Emp emp);
    Emp queryEmpById(int id);
    List<Emp> queryEmpList();
}

DeptMapper:


@Mapper
@Repository
public interface DeptMapper {
    List<Dept> queryDeptList(@Param("cid") int cid);
}

EmpMapper.xml 配置文件


<mapper namespace="com.acoffee.mapper.EmpMapper">

    <resultMap id="EmpMap" type="Emp">
        <id column="id" property="id"></id>
        <id column="lastname" property="lastname"></id>
        <id column="email" property="email"></id>
        <id column="gender" property="gender"></id>
        <association property="dept" select="com.acoffee.mapper.DeptMapper.queryDeptList" column="did"></association>
    </resultMap>

    <select id="queryEmpList" resultMap="EmpMap">
        select * from emp_dept.employees
    </select>

</mapper>

DeptMapper.xml配置文件


<mapper namespace="com.acoffee.mapper.DeptMapper">

    <select id="queryDeptList" resultType="Dept">
        select * from emp_dept.department where id = #{id};
    </select>
    
</mapper>

前端页面(部分)


<tr th:each="emp:${emps}">
	  <td th:text="${emp.getId()}"></td>
	  <td th:text="${emp.getLastname()}"></td>
	  <td th:text="${emp.getEmail()}"></td>
	  <td th:text="${emp.getGender()==0?'女':'男'}"></td>
	  <td th:text="${emp.dept.getDname()}"></td>
	  <td th:text="${#dates.format(emp.getBirth(),'yyyy-MM-dd HH:mm:ss')}"></td>
	  <td>
	      <a class="btn btn-sm btn-primary" th:href="@{/emp/{id}/(id=${emp.getId()})}" rel="external nofollow" >编辑</a>
	      <a class="btn btn-sm btn-danger" th:href="@{/delemp/{id}/(id=${emp.getId()})}" rel="external nofollow" >删除</a>
	  </td>
</tr>

查询结果:

在这里插入图片描述

上述我们采用的是分步查询。

我们下面使用association嵌套映射

其实这里查询会出现一个奇怪的事情,

在这里插入图片描述
在这里插入图片描述

因为我们现在两个表中都有id这个字段,所以我们在映射时使用<result property="id" column="id"></result>去查找部门的id时就发现查出来的是员工的id,就是因为员工的id与部门的id字段名重名了?

EmpMapper:


<mapper namespace="com.acoffee.mapper.EmpMapper">

    <resultMap id="EmpMap" type="Emp">
        <id column="id" property="id"></id>
        <id column="lastname" property="lastname"></id>
        <id column="email" property="email"></id>
        <id column="gender" property="gender"></id>
        <association property="dept" javaType="com.acoffee.pojo.Dept">
            <result property="id" column="id"></result>
            <result property="dname" column="dname"></result>
        </association>
    </resultMap>

    <select id="queryEmpList" resultMap="EmpMap">
        select emp.*,dept.* from emp_dept.employees emp,emp_dept.department dept where emp.did = dept.id
    </select>
</mapper>

上述执行结果如下

在这里插入图片描述

我们发现是员工id,我们现在将数据库中部门表的id改为pid

在这里插入图片描述

修改配置文件以及实体类


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dept {
    private int pid;
    private String dname;
}

<mapper namespace="com.acoffee.mapper.EmpMapper">

    <resultMap id="EmpMap" type="Emp">
        <id column="id" property="id"></id>
        <id column="lastname" property="lastname"></id>
        <id column="email" property="email"></id>
        <id column="gender" property="gender"></id>
        <association property="dept" javaType="com.acoffee.pojo.Dept">
            <result property="pid" column="pid"></result>
            <result property="dname" column="dname"></result>
        </association>
    </resultMap>

    <select id="queryEmpList" resultMap="EmpMap">
        select emp.*,dept.* from emp_dept.employees emp,emp_dept.department dept where emp.did = dept.pid
    </select>

</mapper>

执行结果:

在这里插入图片描述

我们就发现查询的就是部门的id了

在这里插入图片描述

但是针对上面这个问题我们将部门的id字段名改为did (did在员工表中也存在) 此时我们再去查询又发现还是可以把部门id查询出来

在这里插入图片描述

这个问题就离谱,难道是因为id是主键,did不是主键的原因?就离谱

到此这篇关于SpringBoot进行多表查询的文章就介绍到这了,更多相关SpringBoot多表查询内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯