SpringBoot進(jìn)行多表查詢功能的實(shí)現(xiàn)
實(shí)體類:
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:
//這個(gè)注解表示這是一個(gè)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>
前端頁(yè)面(部分)
<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>
查詢結(jié)果:

上述我們采用的是分步查詢。
我們下面使用association嵌套映射
其實(shí)這里查詢會(huì)出現(xiàn)一個(gè)奇怪的事情,


因?yàn)槲覀儸F(xiàn)在兩個(gè)表中都有id這個(gè)字段,所以我們?cè)谟成鋾r(shí)使用<result property="id" column="id"></result>去查找部門(mén)的id時(shí)就發(fā)現(xiàn)查出來(lái)的是員工的id,就是因?yàn)閱T工的id與部門(mén)的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>
上述執(zhí)行結(jié)果如下

我們發(fā)現(xiàn)是員工id,我們現(xiàn)在將數(shù)據(jù)庫(kù)中部門(mén)表的id改為pid

修改配置文件以及實(shí)體類
@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>
執(zhí)行結(jié)果:

我們就發(fā)現(xiàn)查詢的就是部門(mén)的id了

但是針對(duì)上面這個(gè)問(wèn)題我們將部門(mén)的id字段名改為did (did在員工表中也存在) 此時(shí)我們?cè)偃ゲ樵冇职l(fā)現(xiàn)還是可以把部門(mén)id查詢出來(lái)

這個(gè)問(wèn)題就離譜,難道是因?yàn)閕d是主鍵,did不是主鍵的原因?就離譜
到此這篇關(guān)于SpringBoot進(jìn)行多表查詢的文章就介紹到這了,更多相關(guān)SpringBoot多表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java為圖片添加水印并保存實(shí)現(xiàn)方法(附帶源碼)
這篇文章主要介紹了如何使用Java編程語(yǔ)言在圖像上添加文字或圖片水印,并提供了一個(gè)簡(jiǎn)單的Java程序?qū)崿F(xiàn),文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2025-03-03
idea導(dǎo)入項(xiàng)目爆紅問(wèn)題記錄以及解決
這篇文章主要介紹了idea導(dǎo)入項(xiàng)目爆紅問(wèn)題記錄以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
SpringBoot+websocket實(shí)現(xiàn)消息對(duì)話功能
WebSocket是一種在Web應(yīng)用程序中實(shí)現(xiàn)實(shí)時(shí)雙向通信的技術(shù),它可以用于在線游戲、在線聊天、推送通知、實(shí)時(shí)監(jiān)控等,并且比傳統(tǒng)的輪詢技術(shù)更加高效和可靠,本文就給大家介紹基于SpringBoot+websocket實(shí)現(xiàn)消息對(duì)話功能,感興趣的小伙伴可以自己動(dòng)手試一試2023-09-09
詳解java中Reference的實(shí)現(xiàn)與相應(yīng)的執(zhí)行過(guò)程
不知道大家知不知道特殊的reference對(duì)象都是被jvm專門(mén)處理的,所以這篇文章就相應(yīng)的工作流程和referencequeue之間的協(xié)作進(jìn)行梳理.有需要的朋友們可以參考借鑒。2016-09-09
java集成開(kāi)發(fā)SpringBoot生成接口文檔示例實(shí)現(xiàn)
這篇文章主要為大家介紹了java集成開(kāi)發(fā)SpringBoot如何生成接口文檔的示例實(shí)現(xiàn)過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
如何對(duì)spring框架的搭建進(jìn)行封裝--springboot
這篇文章主要介紹了如何對(duì)spring框架的搭建進(jìn)行封裝--springboot,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03

