前言
首先在写数据字典之前大家有必要了解一下数据字典是什么东西?
据字典是一种通用的程序设计方法。可以认为,不论什么程序,都是为了处理一定的主体,这里的主体可能是人员、商品(超子)、网页、接口、数据库表、甚至需求分析等等。当主体有很多的属性,每种属性有很多的取值,而且属性的数量和属性取值的数量是不断变化的,特别是当这些数量的变化很快时,就应该考虑引入数据字典的设计方法。
数据字典拥有两种形式
一、把主体的属性代码化放入独立的表中,不是和主体放在一起,主体中只保留属性的代码。这里属性的数量是不变的,而属性取值的数量可以是变化的。
二、用一个表来放结构相同的所有属性信息,不同属性的不同取值统一编码,用“类型”来区别不同的属性,主体中保留属性代码的列表。这样主体所拥有的属性数量就是可变的了。
第二种数据字典比第一种更抽象,层级更高,也更具一般性、通用性。
为了方便大家更好的学习,我为大家准备了一份数据字典的sql数据库语句大家使用即可。
因为在这里无法直接上传sql文件大家在我的百度网盘下载,地址:
链接:https://pan.baidu.com/s/1lOkDIKhHZ91vStVFQ1iKkw
提取码:yyds
一、创建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
下一期将教各位博友如何提高数据字典的性能,非常简单哦,创作不易希望大家觉得有用就给我点一个小赞吧!谢谢