java+mybatis实现查询当前的部门以及部门下的所有的子级部门
时间: 2024-04-28 14:02:20 浏览: 128
java+mybatis
可以通过MyBatis的递归查询功能来实现查询当前部门及其所有子级部门,具体实现步骤如下:
1. 定义部门实体类Dept,包含部门id、上级部门id、部门名称等属性。
2. 在Mapper.xml文件中编写递归查询语句,使用MyBatis的递归查询功能,例如:
```xml
<select id="selectDeptList" resultMap="DeptResultMap">
WITH RECURSIVE cte AS (
SELECT * FROM dept WHERE dept_id = #{deptId}
UNION ALL
SELECT d.* FROM cte, dept d WHERE d.parent_dept_id = cte.dept_id
)
SELECT * FROM cte;
</select>
```
其中,`RECURSIVE`关键字表示递归查询,`cte`为临时表名,`dept_id`为查询的部门id。
3. 在Mapper接口中定义`selectDeptList`方法,传入`deptId`参数,返回`List<Dept>`类型的结果。
4. 在Service中调用`selectDeptList`方法,即可查询当前部门及其所有子级部门信息。
示例代码如下:
Dept.java
```java
public class Dept {
private Integer deptId;
private Integer parentDeptId;
private String deptName;
// getter/setter
}
```
DeptMapper.xml
```xml
<mapper namespace="com.example.mapper.DeptMapper">
<resultMap id="DeptResultMap" type="Dept">
<id property="deptId" column="dept_id"/>
<result property="parentDeptId" column="parent_dept_id"/>
<result property="deptName" column="dept_name"/>
</resultMap>
<select id="selectDeptList" resultMap="DeptResultMap">
WITH RECURSIVE cte AS (
SELECT * FROM dept WHERE dept_id = #{deptId}
UNION ALL
SELECT d.* FROM cte, dept d WHERE d.parent_dept_id = cte.dept_id
)
SELECT * FROM cte;
</select>
</mapper>
```
DeptMapper.java
```java
public interface DeptMapper {
List<Dept> selectDeptList(Integer deptId);
}
```
DeptService.java
```java
@Service
public class DeptService {
@Autowired
private DeptMapper deptMapper;
public List<Dept> getDeptList(Integer deptId) {
return deptMapper.selectDeptList(deptId);
}
}
```
阅读全文