后端-数据字典模块开发

  • 1、需求和准备
    • 1.1、创建service_cmn模块
    • 1.2、新建application.properties配置文件
    • 1.3、准备实体类
    • 1.4、配置类
    • 1.5、持久层
    • 1.6、业务层
    • 1.7、控制层
    • 1.8、启动类
  • 2、数据字典列表功能
    • 2.1、接口开发
    • 2.2、前端开发
      • 2.2.1、添加路由
      • 2.2.2、新建js文件,调用后端接口
      • 2.2.3、编辑vue页面
        • 2.2.3.1、vue页面代码解释
    • 2.3、测试

1、需求和准备

1.1、创建service_cmn模块

1.2、新建application.properties配置文件

# 服务端口
server.port=8202
# 服务名
spring.application.name=service_cmn# 环境设置:dev、test、prod
spring.profiles.active=dev# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/yygh_cmn?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8#配置mapper xml文件的路径
mybatis-plus.mapper-locations=classpath:com/study/yygh/hosp/mapper/xml/*.xml
#mybatis-plus.mapper-locations=classpath:com/atguigu/yygh/mapper/xml/*.xml
# nacos服务地址
#spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848#开启sentinel
#feign.sentinel.enabled=true
#设置sentinel地址
#spring.cloud.sentinel.transport.dashboard=http://127.0.0.1:8858#mongodb地址
#spring.data.mongodb.host=192.168.44.163
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=yygh_hosp#rabbitmq地址
#spring.rabbitmq.host=127.0.0.1
#spring.rabbitmq.port=5672
#spring.rabbitmq.username=guest
#spring.rabbitmq.password=guest

1.3、准备实体类


@Data
@ApiModel(description = "数据字典")
@TableName("dict")
public class Dict {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "id")private Long id;@ApiModelProperty(value = "创建时间")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")@TableField("create_time")private Date createTime;@ApiModelProperty(value = "更新时间")@TableField("update_time")private Date updateTime;@ApiModelProperty(value = "逻辑删除(1:已删除,0:未删除)")@TableLogic@TableField("is_deleted")private Integer isDeleted;@ApiModelProperty(value = "其他参数")@TableField(exist = false)private Map<String,Object> param = new HashMap<>();@ApiModelProperty(value = "上级id")@TableField("parent_id")private Long parentId;@ApiModelProperty(value = "名称")@TableField("name")private String name;@ApiModelProperty(value = "值")@TableField("value")private String value;@ApiModelProperty(value = "编码")@TableField("dict_code")private String dictCode;@ApiModelProperty(value = "是否包含子节点")@TableField(exist = false)private boolean hasChildren;
}

1.4、配置类

@Configuration
@MapperScan(basePackages = "com.study.yygh.cmn.mapper")
public class CmnConfig {//分页插件@Beanpublic PaginationInterceptor paginationInterceptor() {PaginationInterceptor paginationInterceptor = new PaginationInterceptor();// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false// paginationInterceptor.setOverflow(false);// 设置最大单页限制数量,默认 500 条,-1 不受限制// paginationInterceptor.setLimit(500);// 开启 count 的 join 优化,只针对部分 left joinpaginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));return paginationInterceptor;}
}

1.5、持久层

mapper:

public interface DictMapper extends BaseMapper<Dict> {}

mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.study.yygh.cmn.mapper.DictMapper"></mapper>

1.6、业务层


接口

public interface DictService extends IService<Dict> {}

实现类:

@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {}

1.7、控制层

@ApiModel("数据字典管理")
@RestController
@RequestMapping("admin/cmn/dict")
@CrossOrigin
public class DictController {@Autowiredprivate DictService dictService;
}

1.8、启动类

@SpringBootApplication
@ComponentScan(basePackages = {"com.study"})
public class ServiceCmnApplication {public static void main(String[] args) {SpringApplication.run(ServiceCmnApplication.class,args);}
}

2、数据字典列表功能

2.1、接口开发

1、控制层方法

 //根据数据id查询子数据列表
@ApiModelProperty("//根据数据id查询子数据列表")@RequestMapping("findChildData/{id}")public Result findChildData(@PathVariable Long id){List<Dict> list = dictService.findChildData(id);return Result.ok(list);}

2、业务层

@Service
public class DictServiceImpl extends ServiceImpl<DictMapper, Dict> implements DictService {//根据数据id查询子数据列表@Overridepublic List<Dict> findChildData(Long id) {QueryWrapper<Dict> query = new QueryWrapper<>();query.eq("parent_id",id);List<Dict> dictList = baseMapper.selectList(query);//查询父节点为id的所有子数据对象//遍历集合中的每一个对象,并调用方法,判断该对象是否有子数据for(Dict dict:dictList){Long dictId = dict.getId();boolean flag = this.isChildren(dictId);//如果对象是否有子数据,返回truedict.setHasChildren(flag);//将hasChildren属性设置为flag的值}return dictList;}//判断该id是否有子数据private boolean isChildren(Long id){//封装查询条件QueryWrapper<Dict> query = new QueryWrapper<>();query.eq("parent_id",id);Integer count = baseMapper.selectCount(query);//如果有数据,会返回查询出的记录条数return count > 0;//如果查询出数据,返回true}
}

2.2、前端开发

2.2.1、添加路由

在src/router/index.js文件中添加路由

//数据字典设置
{path: '/cmn',component: Layout,redirect: '/cmn/list',name: '数据管理',alwaysShow: true,//由于该模块下只有一个数据字典子节点,所以在页面上只会展示数据字典节点,而不会展示数据管理功能,而使用了alwaysShow: true,即便该模块只有一个功能点,也会展示数据管理按钮的meta: { title: '数据管理', icon: 'example' },children: [{path: 'list',name: '数据字典',component: () => import('@/views/dict/list'),meta: { title: '数据字典', icon: 'table' }}]
},

不使用alwaysShow:true时,只显示数据字典
使用了alwaysShow:true。可以下拉,同时显示数据管理和数据字典

2.2.2、新建js文件,调用后端接口

import request from '@/utils/request'export default{//编写方法,调用后端接口//根据id查询子数据列表dictList(id){return request({url:`/admin/cmn/dict/findChildData/${id}`,method:'get'})}}

2.2.3、编辑vue页面

<template><div class="app-container"><el-table :data="list" style="width: 100%" row-key="id"border lazy:load="getChildrens":tree-props="{children: 'children', hasChildren: 'hasChildren'}"><el-table-column label="名称" width="230" align="left"><template slot-scope="scope"><span>{{ scope.row.name }}</span></template></el-table-column><el-table-column label="编码" width="220"><template slot-scope="{row}">{{ row.dictCode }}</template></el-table-column><el-table-column label="值" width="230" align="left"><template slot-scope="scope"><span>{{ scope.row.value }}</span></template></el-table-column><el-table-column label="创建时间" align="center"><template slot-scope="scope"><span>{{ scope.row.createTime }}</span></template></el-table-column></el-table></div>
</template><script>
//引入js文件
import dict from '@/api/dict.js'export default {data() {return {list:[],//初始化数据,数据字典列表数组}},created() {this.getDictList(1)},methods:{//数据字典列表getDictList(id){dict.dictList(id).then(response=>{// console.log(response)this.list = response.data})},getChildrens(tree,treeNode,resolve){dict.dictList(tree.id).then(response=>{resolve(response.data)})}}}
</script>

2.2.3.1、vue页面代码解释

1、:data=“list” 要显示测数据

2、lazy:懒加载。即页面的下拉列表中要显示的数据,只有点击下拉列表时才进行数据渲染。

3、load
我们点击页面上的箭头时,会显示箭头下边的数据,而箭头下边的数据也要调用方法进行查询。使用load的意思时当我们点击箭头时执行下方数据的查询的方法。

getChildrens函数:

element-ui官方解释:


4、:tree-props
根据hasChildren的值做判断,如果hasChildren值为true,才展示下拉列表。否则不展示下拉列表。
所以在返回的数据对象中要包含hasChildren属性。

4、slot-scope=“scope”

5、getChildrens方法表示可以查询第一级下边的第二级数据,可以查询第二级下边的第三级数据。实际上做了个递归操作。

  • 通过tree.id查询里边的内容的。
  • resolve(response.data)将查询出来的内容做显示

2.3、测试

测试后我们发现表格下拉功能没有成功。这是因为我们使用的element-ui代码版本较高,而项目中使用的element-ui版本较低,即两者版本不一致导致的。
我们只需在package.json中修改element-ui版本即可。
如下图所示,element-ui版本原来是2.4.6,修改额lelement-ui版本为2.12.0
再次测试,下拉列表功能成功展示:

后端-数据字典模块开发相关推荐

  1. 尚医通(九)数据字典模块前后端 | EasyExcel

    目录 一.数据字典介绍 1.什么是数据字典 2.页面展示效果 3.数据字典表设计 4.数据分析 5.根据页面效果分析数据接口 二.搭建数据字典模块 三.数据字典列表接口 1.model模块添加数据字典 ...

  2. Nginx源码从模块开发入手,3个项目弄透nginx模块开发丨Linux服务器开发丨C++后端开发丨中间件开发丨分布式丨web服务器

    Nginx源码从模块开发入手,3个项目弄透nginx模块开发 1. Nginx http请求的11个处理流程 2. Upstream, Filter,Handler模块分析 3. nginx如何拒绝无 ...

  3. 16w行的nginx源码,如何分拆模块阅读,手把手教你造轮子丨Nginx模块开发丨C/C++丨Linux服务器开发丨后端开发

    16w行的nginx源码,如何分拆模块阅读,让你明白轮子如何造  1. 多进程模型下的惊群处理 2. 内存池的代码封装 3. slab共享内存分配 视频讲解如下,点击观看: 16w行的nginx源码, ...

  4. JavaScript之后端Web服务器开发Node.JS基本模块学习篇

    JavaScript之后端Web服务器开发Node.JS基本模块学习篇 基本模块 fs文件系统模块 stream支持流模块 http crypto加密模块 基本模块 因为Node.js是运行在服务区端 ...

  5. 03-数据字典模块开发

    一.数据字典介绍 1.介绍 何为数据字典? 数据字典就是管理系统常用的分类数据或者一些固定数据,例如:省市区三级联动数据.民族数据.行业数据.学历数据等,由于该系统大量使用这种数据,所以我们要做一个数 ...

  6. Nginx 模块开发

    Nginx 模块概述 Nginx 模块有三种角色: 处理请求并产生输出的 Handler 模块: 处理由 Handler 产生的输出的 Filter(滤波器)模块: 当出现多个后台服务器时,Load- ...

  7. Jeecg-Boot 2.0.0 版本发布,基于Springboot+Vue 前后端分离快速开发平台

    Jeecg-Boot 2.0.0 版本发布,前后端分离快速开发平台 Jeecg-Boot项目简介 源码下载 升级日志 Issues解决 v1.1升级到v2.0不兼容地方 系统截图 Jeecg-Boot ...

  8. 视频教程-SpringBoot实战教程:SpringBoot入门及前后端分离项目开发-Java

    SpringBoot实战教程:SpringBoot入门及前后端分离项目开发 十三,CSDN达人课课程作者,CSDN 博客作者,现就职于某网络科技公司任职高级 Java 开发工程师,13blog.sit ...

  9. 10 接口测试平台 项目管理模块开发(三)

    别人写的平台再垃圾,也是用来淘汰你的. 代码更新地址:https://github.com/ahu965/api-automator.git Python环境没有的,请自行安装,本教程采用的是pyth ...

最新文章

  1. 回溯法排序树怎么画_kd tree(k-dimensional树的简称)
  2. Bzoj1835:[ZJOI2010]基站选址
  3. 一处 ADO.NET Entity Framework 的逻辑BUG
  4. C# Java间进行RSA加密解密交互
  5. 使用Fiddler进行Web接口测试
  6. Problem 2. number题解
  7. Lambda项目:迈向多核及超越
  8. ADF:在任务流终结器中支持bean作用域
  9. ajax轮询模拟websocket,Ajax轮询和SSE服务器推送数据与websocket模式的区别性学习
  10. imageloader图片基本加载
  11. 《软件需求分析(第二版)》第 13 章——需求开发面临的特殊难题 重点部分总结
  12. (14)FPGA面试题线与逻辑
  13. ApacheCN Angular 译文集 20211114 更新
  14. html中单选怎么写,在HTML中select标签怎样实现单选和多选
  15. chrome浏览器插件--让你的谷歌浏览器舒适度提升1800%的插件(程序员推荐)
  16. Java编程思想(五) —— 多态(下)
  17. android 打砖块教程,scratch教程-打砖块游戏
  18. HTTP笔记1:网络模型与TCP协议
  19. Java之HashTab基本用法
  20. 纯css hover放大图片

热门文章

  1. 【Presto】URLDecoder: Illegal hex characters in escape (%) pattern 错误处理
  2. 涉密计算机的安全审计和检查,计算机安全保密审计报告
  3. 【格式化文档】ISO 27001控制措施+ISO27002实施指南 【下】
  4. pycharm安装python_pycharm如何安装numpy
  5. fast角点与ShiTomas角点速度对比
  6. 软件License认证方案的设计思路
  7. 分享127个ASP源码,总有一款适合您
  8. html访问access,HTML_ACCESS数据访问页配置实例,今天在本机上配置成功三层式 - phpStudy...
  9. 椭圆 —— 从理论推导到最小二乘法拟合
  10. c语言围棋对弈程序设计,C语言围棋对弈程序设计.doc