SpringBoot進行多表查詢功能的實現
實體類:
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時就發(fā)現查出來的是員工的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>
上述執(zhí)行結果如下

我們發(fā)現是員工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>
執(zhí)行結果:

我們就發(fā)現查詢的就是部門的id了

但是針對上面這個問題我們將部門的id字段名改為did (did在員工表中也存在) 此時我們再去查詢又發(fā)現還是可以把部門id查詢出來

這個問題就離譜,難道是因為id是主鍵,did不是主鍵的原因?就離譜
到此這篇關于SpringBoot進行多表查詢的文章就介紹到這了,更多相關SpringBoot多表查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解java中Reference的實現與相應的執(zhí)行過程
不知道大家知不知道特殊的reference對象都是被jvm專門處理的,所以這篇文章就相應的工作流程和referencequeue之間的協作進行梳理.有需要的朋友們可以參考借鑒。2016-09-09
java集成開發(fā)SpringBoot生成接口文檔示例實現
這篇文章主要為大家介紹了java集成開發(fā)SpringBoot如何生成接口文檔的示例實現過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
如何對spring框架的搭建進行封裝--springboot
這篇文章主要介紹了如何對spring框架的搭建進行封裝--springboot,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-03-03

