目录
前言
一、创建springboot的工程,pom文件
二、实体类,mapper层,service层,controller层
1.实体类
2.mapper层
3.service层
4.service实现层简称(serviceImpl)
5.controller层
实现效果:
前言
首先在写数据字典之前大家有必要了解一下数据字典是什么东西?
据字典是一种通用的程序设计方法。可以认为,不论什么程序,都是为了处理一定的主体,这里的主体可能是人员、商品(超子)、网页、接口、数据库表、甚至需求分析等等。当主体有很多的属性,每种属性有很多的取值,而且属性的数量和属性取值的数量是不断变化的,特别是当这些数量的变化很快时,就应该考虑引入数据字典的设计方法。
数据字典拥有两种形式
一、把主体的属性代码化放入独立的表中,不是和主体放在一起,主体中只保留属性的代码。这里属性的数量是不变的,而属性取值的数量可以是变化的。
二、用一个表来放结构相同的所有属性信息,不同属性的不同取值统一编码,用“类型”来区别不同的属性,主体中保留属性代码的列表。这样主体所拥有的属性数量就是可变的了。
第二种数据字典比第一种更抽象,层级更高,也更具一般性、通用性。
为了方便大家更好的学习,我为大家准备了一份数据字典的sql数据库语句大家使用即可。
一、创建springboot工程,pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
<groupId>com.hnzhzw</groupId>
<artifactId>dict</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
</project>
二、实体类,mapper层,service层,controller层
1.实体类
代码如下(示例):
package com.hnzhzw.dict.pojo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.List;
@Data
@TableName("dict")
public class Dict {
@ApiModelProperty(value = "id")
private Long id;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("create_time")
private Date createTime;
@TableField("update_time")
private Date updateTime;
@TableLogic
@TableField("is_deleted")
private Integer isDeleted;
@TableField("parent_id")
private Long parentId;
@TableField("name")
private String name;
@TableField("value")
private String value;
@TableField("dict_code")
private String dictCode;
@TableField(exist = false)
private boolean hasChildren;
@TableField(exist = false)
private List<Dict> dictList;
}
2.mapper层
代码如下(示例):
package com.hnzhzw.dict.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hnzhzw.dict.pojo.Dict;
import org.springframework.stereotype.Repository;
@Repository
public interface DictMapper extends BaseMapper<Dict> {
}
继承mybatisplus即可
3.service层
代码如下(示例):
package com.hnzhzw.dict.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hnzhzw.dict.pojo.Dict;
import java.util.List;
public interface DictService extends IService<Dict> {
//根据id查询子数据列表
List<Dict> findChildData(Long id);
}
4.service实现层简称(serviceImpl)
package com.hnzhzw.dict.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hnzhzw.dict.mapper.DictMapper;
import com.hnzhzw.dict.pojo.Dict;
import com.hnzhzw.dict.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {
@Autowired
private DictMapper dictMapper;
//递归查询出数据字典父id下所有的子集
@Override
public List<Dict> findChildData(Long id) {
List<Dict> dicts = new ArrayList<>();
QueryWrapper<Dict> wrapper = new QueryWrapper<>();
wrapper.eq("parent_id",id);
List<Dict> dictList = baseMapper.selectList(wrapper);
for (Dict dict :
dictList) {
Long dictId = dict.getId();
boolean isChild = this.isChildren(dictId);
dict.setHasChildren(isChild);
List<Dict> childData = findChildData(dictId);
dict.setDictList(childData);
dicts.add(dict);
}
return dicts;
}
//判断id下面是否有子节点
private boolean isChildren(Long id) {
QueryWrapper<Dict> wrapper = new QueryWrapper<>();
wrapper.eq("parent_id",id);
Integer count = baseMapper.selectCount(wrapper);
// 0>0 1>0
return count>0;
}
}
5.controller层
package com.hnzhzw.dict.controller;
import com.hnzhzw.dict.common.CommonReturnType;
import com.hnzhzw.dict.pojo.Dict;
import com.hnzhzw.dict.service.DictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/dict/")
public class DictController {
@Autowired
private DictService dictService;
/**
* 根据数据id查询子数据列表
* @param id
* @return
*/
@GetMapping("findChildData/{id}")
public CommonReturnType findChildData(@PathVariable Long id
){
List<Dict> list = dictService.findChildData(id);
return CommonReturnType.create(list);
}
}
在浏览器或postman测试都可行,测试地址:localhost:8080/dict/findChildData/0