【SpringBoot】廿四、SpringBoot中实现数据字典
我们在⽇常的项⽬开发中,对于数据字典肯定不模糊,它帮助了我们更加⽅便快捷地进⾏开发,下⾯⼀起来看看在 SpringBoot 中如何实现数据字典功能的
⼀、简介
1、定义
数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进⾏定义和描述,其⽬的是对数据流程图中的各个元素做出详细的说明,使⽤数据字典为简单的建模项⽬。简⽽⾔之,数据字典是描述数据的信息集合,是对系统中使⽤的所有数据元素的定义的集合。
数据字典(Data dictionary)是⼀种⽤户可以访问的记录数据库和应⽤程序元数据的⽬录。主动数据字典是指在对数据库或应⽤程序结构进⾏修改时,其内容可以由DBMS⾃动更新的数据字典。被动数据字典是指修改时必须⼿⼯更新其内容的数据字典。
2、理解
数据字典是⼀种通⽤的程序设计思想,将主体与分⽀存于两张数据表中,他们之间靠着唯⼀的 code 相互联系,且 code 是唯⼀存在的,分⽀依附主体⽽存在,每⼀条分⽀都有它唯⼀对应的属性值
例如:性别(sex),分为(0–保密1–男2–⼥),那么数据字典的设计就应该是
主表:
{
"code":"sex",
"name":"性别"
}
副表:
[{
"dictCode":"sex",
"code":"0",
"text":"保密"
},
{
"dictCode":"sex",
"code":"1",
"text":"男"
},
{
"dictCode":"sex",
"code":"2",
"text":"⼥"
}
]
那么我们在使⽤数据字典的时候,只需要知道 dictCode,再使⽤ code 到唯⼀的字典值
⼆、数据表设计
1、数据表设计
主表:
drop table if exists sys_dict;
/*==============================================================*/ /* Table: sys_dict                                              */
/*==============================================================*/ create table sys_dict
(
id                  bigint(20) not null auto_increment comment '主键id',
code                varchar(32) comment '编码',
name                varchar(32) comment '名称',
descript            varchar(64) comment '描述',
springboot aopstatus              tinyint(1)default0 comment '状态(0--正常1--冻结)',
create_time          datetime comment '创建时间',
create_user          bigint(20) comment '创建⼈',
del_flag            tinyint(1)default0 comment '删除状态(0,正常,1已删除)',  primary key (id)
)
type = InnoDB;
alter table sys_dict comment '字典管理表';
副表:
drop table if exists sys_dict_detail;
/
*==============================================================*/ /* Table: sys_dict_detail                                      */
/*==============================================================*/ create table sys_dict_detail
(
id                  bigint(20) not null comment '主键id',
dict_code            varchar(32) comment '字典编码',
code                varchar(32) comment '编码',
name                varchar(32) comment '名称',
primary key (id)
)
type = InnoDB;
alter table sys_dict_detail comment '字典配置表';
它们的关系如图所⽰:
2、数据字典配置
三、开发前戏
1、引⼊ maven 依赖
<!-- web⽀持-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- thymeleaf模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- aop依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
我们引⼊了 aop 切⾯所需依赖,我们的数据字典也是基于 aop 切⾯实现的2、创建实体类
⽤户信息表 SysUserInfo.java:
import batisplus.annotation.*;
import sion.activerecord.Model; n.annotation.Dict;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
perimental.Accessors;
import java.io.Serializable;
/**
* <p>
* ⽤户信息表
* </p>
*
* @author lizhou
* @since 2020-07-06
*/
@Data
@EqualsAndHashCode(callSuper =false)
@Accessors(chain =true)
@TableName("sys_user_info")
@ApiModel(value="SysUserInfo对象", description="⽤户信息表") public class SysUserInfo extends Model<SysUserInfo>{
@ApiModelProperty(value ="ID")
@TableId(value ="id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value ="登录账号")
@TableField("account")
private String account;
@ApiModelProperty(value ="登录密码")
@TableField("password")
private String password;
@ApiModelProperty(value ="姓名")
@TableField("name")
private String name;
@ApiModelProperty(value ="性别(0--未知1--男2--⼥)")
@TableField("sex")
@Dict(dictCode ="sex")
private Integer sex;
@ApiModelProperty(value ="状态(0--正常1--冻结)")
@TableField("status")
@Dict(dictCode ="status")
private Integer status;
}
3、返回结果通⽤实体类
返回结果通⽤实体类 LayTableResult.java:
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @param <T> 返回的实体类
* @author lizhou
* @描述后台返回给LayUI的数据格式
*/
@Getter
@Setter
public class LayTableResult<T>{
/
**
* 接⼝状态
*/
private Integer code;
/**
* 提⽰信息
*/
private String msg;
/**
* 接⼝数据长度
*/
private Long count;
/**
* 接⼝数据
*/
private List<T> data;
/**
* ⽆参构造函数
*/
public LayTableResult(){
super();
}
/
**
* 返回数据给表格
*/
public LayTableResult(Long count, List<T> data){
super();
this.data = data;
}
}
由于我⽤的是 layui 前端框架,我写了⼀个返给 layui 表格的通⽤实体类,这是在实现数据字典需要⽤到的,判断响应返回实体类的类型来判断是否需要注⼊字典
四、开发实现
1、创建⾃定义注解
我们创建⼀个⾃定义注解 @Dict 来实现数据字典

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。