省市区级联mybatisplus
时间: 2025-01-02 13:36:55 浏览: 9
### 使用 MyBatis Plus 实现省市区级联功能
#### 数据库表结构设计
为了实现省市区的级联查询,数据库中的表通常会按照地区层级来构建。假设存在三个表 `province` (省份), `city` (城市),以及 `district` (区县)。
- **Province 表**
| Column Name | Type |
| -------------- | ----------- |
| id | INT |
| name | VARCHAR |
- **City 表**
| Column Name | Type |
| ------------- | ----------- |
| id | INT |
| province_id | INT |
| name | VARCHAR |
- **District 表**
| Column Name | Type |
| ------------- | ----------- |
| id | INT |
| city_id | INT |
| name | VARCHAR |
这些表格之间的关系通过外键关联起来[^1]。
#### 创建实体类
对于上述每张表,在Java项目里都需要对应的实体类:
```java
@Data
public class Province {
private Long id;
private String name;
}
@Data
public class City {
private Long id;
private Long provinceId;
private String name;
@TableField(exist = false)
private Province province; // 非持久化字段用于封装上级对象
}
```
同样的方式定义 District 类,并加入对 City 的引用。
#### Mapper 接口配置
利用 MyBatis Plus 提供的基础 CRUD 功能简化操作,只需继承 BaseMapper 即可获得基本方法支持:
```java
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface ProvinceMapper extends BaseMapper<Province> {}
public interface CityMapper extends BaseMapper<City> {}
// 同理为 district 定义 mapper...
```
#### Service 层逻辑编写
在服务层处理业务需求时,可以通过组合多个 DAO 方法完成复杂的查询任务。比如获取某个城市的全部下辖区域列表并附带其所属省份的信息:
```java
@Service
public class AreaService {
@Autowired
private CityMapper cityMapper;
public List<City> getCitiesByProvince(Long provinceId){
QueryWrapper<City> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("province_id", provinceId);
return cityMapper.selectList(queryWrapper);
}
// 更多的服务端接口...
}
```
#### 控制器 API 设计
最后一步是在控制器中暴露 RESTful APIs 给前端调用者访问:
```java
@RestController
@RequestMapping("/areas")
public class AreaController {
@Autowired
private AreaService areaService;
@GetMapping("/{provinceId}/cities")
public ResponseEntity<List<City>> getCity(@PathVariable Long provinceId){
List<City> cities = this.areaService.getCitiesByProvince(provinceId);
return ResponseEntity.ok(cities);
}
// 其他APIs...
}
```
以上就是一个简单的基于 MyBatis Plus 构建省市区联动查询的例子。实际应用可能还需要考虑分页、缓存优化等问题。
阅读全文