實體類:
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>
查詢結(jié)果:
上述我們采用的是分步查詢。
我們下面使用association嵌套映射
其實這里查詢會出現(xiàn)一個奇怪的事情,
因為我們現(xiàn)在兩個表中都有id這個字段,所以我們在映射時使用<result property="id" column="id"></result>
去查找部門的id時就發(fā)現(xiàn)查出來的是員工的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í)行結(jié)果如下
我們發(fā)現(xiàn)是員工id,我們現(xiàn)在將數(shù)據(jù)庫中部門表的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í)行結(jié)果:
我們就發(fā)現(xiàn)查詢的就是部門的id了
但是針對上面這個問題我們將部門的id字段名改為did (did在員工表中也存在) 此時我們再去查詢又發(fā)現(xiàn)還是可以把部門id查詢出來
這個問題就離譜,難道是因為id是主鍵,did不是主鍵的原因?就離譜
到此這篇關(guān)于SpringBoot進(jìn)行多表查詢的文章就介紹到這了,更多相關(guān)SpringBoot多表查詢內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/weixin_44742328/article/details/120239350