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)文章
使用SpringBoot+EasyExcel+Vue實(shí)現(xiàn)excel表格的導(dǎo)入和導(dǎo)出詳解
這篇文章主要介紹了使用SpringBoot+VUE+EasyExcel?整合導(dǎo)入導(dǎo)出數(shù)據(jù)的過(guò)程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08java實(shí)現(xiàn)國(guó)產(chǎn)sm4加密算法
這篇文章主要介紹了java實(shí)現(xiàn)國(guó)產(chǎn)sm4加密算法的步驟,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-12-12Java的特點(diǎn)和優(yōu)點(diǎn)(動(dòng)力節(jié)點(diǎn)整理)
由于Java語(yǔ)言的設(shè)計(jì)者們十分熟悉C++語(yǔ)言,所以在設(shè)計(jì)時(shí)很好地借鑒了C++語(yǔ)言??梢哉f(shuō),Java語(yǔ)言是一種比C++語(yǔ)言“還面向?qū)ο蟆钡囊环N編程語(yǔ)言,下面通過(guò)本文說(shuō)下java的特點(diǎn)和優(yōu)點(diǎn)2017-03-03解讀String字符串導(dǎo)致的JVM內(nèi)存泄漏問(wèn)題
這篇文章主要介紹了解讀String字符串導(dǎo)致的JVM內(nèi)存泄漏問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java.try catch finally 的執(zhí)行順序說(shuō)明
這篇文章主要介紹了Java.try catch finally 的執(zhí)行順序說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-10-10基于Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的實(shí)例代碼
這篇文章主要介紹了Java隨機(jī)生成手機(jī)短信驗(yàn)證碼的實(shí)例代碼,代碼分為哦簡(jiǎn)單版和復(fù)雜版,需要的朋友可以參考下2019-04-04SpringBoot實(shí)現(xiàn)excel生成并且通過(guò)郵件發(fā)送的步驟詳解
實(shí)際開(kāi)發(fā)中,特別是在B端產(chǎn)品的開(kāi)發(fā)中,我們經(jīng)常會(huì)遇到導(dǎo)出excel的功能,更進(jìn)階一點(diǎn)的需要我們定期生成統(tǒng)計(jì)報(bào)表,然后通過(guò)郵箱發(fā)送給指定的人員,?今天要帶大家來(lái)實(shí)現(xiàn)的就是excel生成并通過(guò)郵件發(fā)送,需要的朋友可以參考下2023-10-10詳解Java編寫(xiě)算法時(shí)如何加快讀寫(xiě)數(shù)據(jù)速度
這篇文章主要為大家詳細(xì)介紹了Java在編寫(xiě)算法時(shí)如何加快讀寫(xiě)數(shù)據(jù)速度,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03使用maven實(shí)現(xiàn)redis與idea的連接問(wèn)題
這篇文章主要介紹了使用maven實(shí)現(xiàn)redis與idea的連接問(wèn)題,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07