mybatis省市区的递归查询
时间: 2024-10-29 11:05:01 浏览: 27
mybatis递归查询菜单树
MyBatis 中的递归查询通常用于处理关联层级较深的数据结构,比如省市区这样的行政区划信息,这种数据经常存在一对多的关系。在 SQL 查询中,如果直接使用简单的 JOIN 可能会变得复杂且难以维护,特别是当层级增多时。
在 MyBatis 中,可以利用自连接 (self-join) 或者使用子查询配合递归来实现这样的递归查询。这里提供一种常见的方法:
首先,假设有一个 `City` 表,包含了 `id`, `parent_id` 和 `name` 字段,其中 `parent_id` 存储了上级城市 ID。你可以创建一个动态 SQL 的标签(如 `<select>` 标签),通过 `city.id = #{parentId}` 来指定当前城市的父级,并递归获取其下级城市。
例如:
```xml
<select id="findCitiesByParent" resultType= "com.example.City">
SELECT * FROM city c1
LEFT JOIN city c2 ON c1.id = c2.parent_id
<if test="parentId != null">
AND c2.id = #{parentId}
<choose>
<when test="level > 0">
AND c2.level = #{level} - 1
</when>
<otherwise>
AND c2.id IN (
SELECT parent_id
FROM city
WHERE id = #{parentId}
)
</otherwise>
</choose>
</if>
</select>
```
在这个例子中,`#{parentId}` 是传入的父城市 ID,`#{level}` 是希望查询到的城市层级。通过嵌套的 `if` 和 `choose` 元素,可以根据需求限制递归深度。
阅读全文