尚医通06:数据字典+EasyExcel+mongodb

这篇具有很好参考价值的文章主要介绍了尚医通06:数据字典+EasyExcel+mongodb。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

内容介绍

1、数据字典列表前端

2、EasyExcel介绍、实例

3、数据字典导出接口、前端

4、数据字典导入接口、前端

5、数据字典添加redis缓存

6、MongoDB简介

7、MongoDB安装

8、MongoDB基本概念

数据字典列表前端

1、测试问题

1)报错日志

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2)问题定位

URL错误

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

3)解决问题

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2nginx

1)基本功能

反向代理、负载均衡、动静分离

2)安装

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

解压即可使用

3)启动

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

4)修改配置

server {

    listen 9001;

    server_name localhost;

    location ~/hosp/ {          

        proxy_pass http://localhost:8201;

    }

    location ~/cmn/ {          

        proxy_pass http://localhost:8202;

    }

}

重启服务或重新加载(nginx.exe -s reload)才可生效

5)测试访问后端接口

http://localhost:9001/admin/hosp/hospitalSet/findAll

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

6)改造前端

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

重启生效

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

EasyExcel介绍、实例

1、是什么

EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。

2、为什么

没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。

3、准备工作

1cmn导入依赖

<dependencies>

    <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->

    <dependency>

        <groupId>com.alibaba</groupId>

        <artifactId>easyexcel</artifactId>

        <version>2.1.1</version>

    </dependency>

  </dependencies>

2)创建目录、创建实体

@Data

  public class Stu {

    //设置表头名称

    @ExcelProperty("学生编号")

    private int sno;

    //设置表头名称

    @ExcelProperty("学生姓名")

    private String sname;

  }

4、实现写操作

public class WriterTest {

    public static void main(String[] args) {

        String fileName = "D:\\test\\230308\\a.xlsx";

        EasyExcel.write(fileName,Stu.class)

                .sheet("学员信息").doWrite(data());

    }

  

    //循环设置要添加的数据,最终封装到list集合中

    private static List<Stu> data() {

        List<Stu> list = new ArrayList<Stu>();

        for (int i = 0; i < 10; i++) {

            Stu data = new Stu();

            data.setSno(i);

            data.setSname("张三"+i);

            list.add(data);

        }

        return list;

    }

  }

5、实现读操作

1)改造实体

@Data

  public class Stu {

    //设置表头名称

    @ExcelProperty(value = "学生编号",index = 0)

    private int sno;

    //设置表头名称

    @ExcelProperty(value = "学生姓名",index = 1)

    private String sname;

  }

2)创建监听器

public class ExcelListener extends AnalysisEventListener<Stu> {

    @Override

    public void invoke(Stu stu, AnalysisContext analysisContext) {

        //可以实现调用接口,数据入库

        System.out.println("stu = " + stu);

    }

  

    //读取excel表头信息

    @Override

    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {

        System.out.println("表头信息:"+headMap);

    }

  

    @Override

    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

  

    }

  }

3)读数据实例

public class ReadTest {

    public static void main(String[] args) {

        String fileName = "D:\\test\\230308\\a.xlsx";

        EasyExcel.read(fileName,Stu.class,new ExcelListener()).sheet().doRead();

    }

  }
数据字典导出、前端

1、准备工作

1)确认依赖

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2)确认对象

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2、实现导出接口

1)分析接口

*参数:response

*返回值:无

2)实现controller

@ApiOperation(value="导出")

  @GetMapping(value = "/exportData")

  public void exportData(HttpServletResponse response) {

    dictService.exportData(response);

  }

3)实现service

//导出

  @Override

  public void exportData(HttpServletResponse response) {

    try {

        //1设置response参数

        response.setContentType("application/vnd.ms-excel");

        response.setCharacterEncoding("utf-8");

        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系

        String fileName = URLEncoder.encode("数据字典", "UTF-8");

        response.setHeader("Content-disposition", "attachment;filename="+ fileName + ".xlsx");

        //2查询数据字典表数据List<Dict>

        List<Dict> dictList = baseMapper.selectList(null);

        //3遍历集合List<Dict>转型List<DictEeVo>

        List<DictEeVo> dictEeVoList = new ArrayList<>();

        for (Dict dict : dictList) {

            DictEeVo dictEeVo = new DictEeVo();

            BeanUtils.copyProperties(dict,dictEeVo);

            dictEeVoList.add(dictEeVo);

        }

        //4调用工具方法导出数据

        ServletOutputStream outputStream = response.getOutputStream();

        EasyExcel.write(outputStream,DictEeVo.class)

                .sheet("数据字典").doWrite(dictEeVoList);

  

    } catch (IOException e) {

        throw new YyghException(20001,"导出失败");

    }

  

  }

3、对接前端

1)添加页面元素

<div class="el-toolbar">

      <div class="el-toolbar-body" style="justify-content: flex-start;">

        <el-button type="text" @click="exportData">

          <i class="fa fa-plus"/> 导出

        </el-button>

      </div>

    </div>

(2)实现js方法

//导出数据

    exportData(){

        window.open(`${process.env.VUE_APP_BASE_API}admin/cmn/dict/exportData`)

    }

3)测试

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

数据字典导入、前端

1数据字典导入接口

1)分析接口

*参数:file

*返回值:R.ok()

2)实现controller

@ApiOperation(value = "导入")

  @PostMapping("importData")

  public R importData(MultipartFile file) {

    dictService.importData(file);

    return R.ok();

  }

3)创建监听器

@Component

  public class DictListener  extends AnalysisEventListener<DictEeVo> {

    

    @Autowired

    private DictMapper dictMapper;

    

    //手动注入,使用有参构造

    //private DictMapper dictMapper;

    

    @Override

    public void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {

        //1转化数据类型DictEeVo=Dict

        Dict dict = new Dict();

        BeanUtils.copyProperties(dictEeVo,dict);

        //2补充数据

        dict.setIsDeleted(0);

        //3数据入库

        dictMapper.insert(dict);

    }

  

    @Override

    public void doAfterAllAnalysed(AnalysisContext analysisContext) {

  

    }

  }

4实现service

@Autowired

  private DictListener dictListener;
//导入

  @Override

  public void importData(MultipartFile file) {

    try {

        InputStream inputStream = file.getInputStream();

        EasyExcel.read(inputStream,DictEeVo.class,dictListener).sheet().doRead();

    } catch (IOException e) {

        throw new YyghException(20001,"导入失败");

    }

  }

5)测试

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2、对接前端

1)分析需求

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2)查看组件

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

3)添加页面元素

<div class="el-toolbar">

      <div class="el-toolbar-body" style="justify-content: flex-start;">

        <el-button type="text" @click="exportData">

          <i class="fa fa-plus"/> 导出

        </el-button>

        <el-button type="text" @click="importData"><i class="fa fa-plus"/> 导入</el-button>

      </div>

    </div>

<el-dialog title="导入" :visible.sync="dialogImportVisible" width="480px">

      <el-form label-position="right" label-width="170px">

        <el-form-item label="文件">

          <el-upload

            :multiple="false"

            :on-success="onUploadSuccess"

            :action="BASE_URL+'admin/cmn/dict/importData'"

            class="upload-demo"

          >

            <el-button size="small" type="primary">点击上传</el-button>

            <div slot="tip" class="el-upload__tip">只能上传xls文件,且不超过500kb</div>

          </el-upload>

        </el-form-item>

      </el-form>

      <div slot="footer" class="dialog-footer">

        <el-button @click="dialogImportVisible = false">取消</el-button>

      </div>

    </el-dialog>

4)实现js

*属性

data() {

    return {

      list: [],

      dialogImportVisible: false, //对话框是否显示

      BASE_URL: process.env.VUE_APP_BASE_API //基础访问地址

    };

  },

……

*方法

//打开导入窗口

    importData() {

      this.dialogImportVisible = true;

    },

    //导入成功方法

    onUploadSuccess(response, file) {

      this.$message.success("上传成功");

      this.dialogImportVisible = false;

      this.getData();

    }

数据字典添加redis缓存

1redis回顾

2、准备工作

1)虚拟机

2)安装redis

3)检查配置

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

4)启动redis

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

3redis缓存访问机制

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

4、整合redis

1common_utils模块,添加redis依赖

<dependencies>

    <!-- redis -->

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-data-redis</artifactId>

    </dependency>

  

    <!-- spring2.X集成redis所需common-pool2-->

    <dependency>

        <groupId>org.apache.commons</groupId>

        <artifactId>commons-pool2</artifactId>

        <version>2.6.0</version>

    </dependency>

  </dependencies>

2common_utils模块,添加Redis配置类

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

@Configuration

@EnableCaching

  public class RedisConfig {

    /**

     * 设置RedisTemplate规则

     * @param redisConnectionFactory

     * @return

     */

    @Bean

    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {

        RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>();

        redisTemplate.setConnectionFactory(redisConnectionFactory);

        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

  

  //解决查询缓存转换异常的问题

        ObjectMapper om = new ObjectMapper();

  // 指定要序列化的域,field,getset,以及修饰符范围,ANY是都有包括privatepublic

        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

  // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会跑出异常

        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(om);

  

  //序列号key value

        redisTemplate.setKeySerializer(new StringRedisSerializer());

        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);

        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);

  

        redisTemplate.afterPropertiesSet();

        return redisTemplate;

    }

  

    /**

     * 设置CacheManager缓存规则

     * @param factory

     * @return

     */

    @Bean

    public CacheManager cacheManager(RedisConnectionFactory factory) {

        RedisSerializer<String> redisSerializer = new StringRedisSerializer();

        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);

  

  //解决查询缓存转换异常的问题

        ObjectMapper om = new ObjectMapper();

        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

        jackson2JsonRedisSerializer.setObjectMapper(om);

  

  // 配置序列化(解决乱码的问题),过期时间600

        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()

                .entryTtl(Duration.ofSeconds(600))

                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))

                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))

                .disableCachingNullValues();

  

        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)

                .cacheDefaults(config)

                .build();

        return cacheManager;

    }

  

  }

3)在service_cmn模块添加redis配置

spring.redis.host=192.168.140.138

  spring.redis.port=6379

  spring.redis.database= 0

  spring.redis.timeout=1800000

  

  spring.redis.lettuce.pool.max-active=20

  spring.redis.lettuce.pool.max-wait=-1

  #最大阻塞等待时间(负数表示没限制)

  spring.redis.lettuce.pool.max-idle=5

  spring.redis.lettuce.pool.min-idle=0
 

(4)查询方法添加注解

@Override

  // redis k:v   k=dict::selectIndexList  v=List<Dict>

  @Cacheable(value = "dict", key = "'selectIndexList'")

  public List<Dict> findChildData(Long id) {

    //1拼写查询条件

    LambdaQueryWrapper<Dict> wrapper = new LambdaQueryWrapper<>();

    wrapper.eq(Dict::getParentId,id);

    //2查询子数据集合

    List<Dict> dictList = baseMapper.selectList(wrapper);

    //3遍历集合,确认是否有子数据

    for (Dict dict : dictList) {

        boolean isChildren = this.isChildren(dict);

        dict.setHasChildren(isChildren);

    }

    return dictList;

  }

5、问题解决

1)问题描述

*一级数据可以走缓存

*二级数据加载不出来

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2)问题定位

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

*二级数据查询需要查询数据库

*二级数据没有查询数据库,查询缓存获取一级数据

3)解决方案

让多次查询redis缓存的key不一样

//根据数据id查询子数据列表

  @Override

  // redis k:v   k=dict::selectIndexList  v=List<Dict>

  @Cacheable(value = "dict", key = "'selectIndexList'+#id")

  public List<Dict> findChildData(Long id) {

    //1拼写查询条件

    LambdaQueryWrapper<Dict> wrapper = new LambdaQueryWrapper<>();

    wrapper.eq(Dict::getParentId,id);

    //2查询子数据集合

    List<Dict> dictList = baseMapper.selectList(wrapper);

    //3遍历集合,确认是否有子数据

    for (Dict dict : dictList) {

        boolean isChildren = this.isChildren(dict);

        dict.setHasChildren(isChildren);

    }

    return dictList;

  }

4redis缓存写操作同步机制

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

MongoDB简介

1 NoSQL概述

2MongoDB是什么

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

MongoDB 是文档型NOSQL数据库

MongoDB安装

1、安装

1)确认docker服务

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2)下载

docker pull mongo:latest

docker pull mongo:4.4.8

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

3)创建和启动容器

docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo:4.4.8

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

(4)进入容器

docker exec -it mymongo /bin/bash

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

5)进入mongo

mongo

新版本:mongosh

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

MongoDB概念介绍

1、与mysql对比

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

2、数据库(文件柜)

1Help查看命令提示

db.help();

2use test

如果数据库不存在,则创建数据库,否则切换到指定数据库

3 查询所有数据库

show dbs;

4)删除当前使用数据库

db.dropDatabase();

5)查看当前使用的数据库

db.getName();

6)显示当前db状态

db.stats();

7)当前db版本

db.version();

8 查看当前db的链接机器地址

db.getMongo();

3、集合(抽屉)

1、 创建一个集合(table)

db.createCollection( "user");

2、 得到指定名称的集合(table )

db.getCollection("user");

4、文档

文档是一组键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别

1)数据类型

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库

尚医通06:数据字典+EasyExcel+mongodb,mongodb,数据库文章来源地址https://www.toymoban.com/news/detail-611676.html

到了这里,关于尚医通06:数据字典+EasyExcel+mongodb的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 尚医通-day14【创建订单】(内附源码)

    生成订单分析 生成订单方法参数:就诊人id与 排班id 生成订单需要获取就诊人信息(微服务远程调用service-user) 获取排班信息与规则信息(微服务远程调用service-hosp) 下单后,通过接口去医院预约下单(httpclient远程调用医院端的接口) 下单成功更新排班信息并发送短信(

    2024年02月09日
    浏览(46)
  • 尚医通-阿里云OSS、用户认证与就诊人

    这里采用的方式是通过后端传 oss,可以对比下 谷粒商城里面的,从后端拿上传凭证,然后前端直传的方式 配置文件 配置常量读取 Service 核心实现 controller 用户登录成功后都要进行身份认证,认证通过后才可以预约挂号 认证过程:用户填写信息(姓名、证件类型、证件号码

    2024年02月01日
    浏览(39)
  • 尚医通-day10【微信扫码登录】(内附源码)

    https://open.weixin.qq.com (1)注册开发者账号:准备营业执照 (2)邮箱激活 (3)完善开发者资料 (4)开发者资质认证:1-2个工作日审批、300元 (5)创建网站应用:提交审核,7个工作日审批(免费) (6)熟悉微信登录流程 参考文档:https://developers.weixin.qq.com/doc/oplatform/Web

    2024年02月08日
    浏览(44)
  • 尚医通-阿里云oss-认证接口开发-前端整合(三十二)

    目录: (1)前台用户系统-阿里云OSS介绍 (2)阿里云oss代码入门案例 (3)上传文件到阿里云oss-接口开发 (4)用户认证-接口开发 (5)用户认证-前端整合 (1)前台用户系统-阿里云OSS介绍 扫码登录后显示用户的昵称,点击下面会显示一些下拉列表,下面完成这些功能  实

    2024年01月17日
    浏览(52)
  • easyExcel模板数据导入数据库

    最近项目中需要用到Excel表格的上传下载功能,于是选择了EasyExcel这款工具,总的来说非常的好用,下面就做一个简单的演示。 官方文档地址   EasyExcel · 语雀 Alibaba Easy Excel - 简单、省内存的Java解析Excel工具 | 首页 pom.xml 中需要添加的依赖 这里用到了  @ExcelProperty  注解,这

    2023年04月08日
    浏览(53)
  • 尚医通 (十) --------- axios、Element UI 与 Node.js

    A、axios 作用 axios 是独立于 vue 的一个项目,可以用于浏览器和 node.js 中发送 ajax 请求。 B、axios 实例 ① 复制 js 资源 ② 创建 axios.html ③ 引入 js ④ 编写 js element-ui 是饿了么前端出品的基于 Vue.js 的 后台组件库,方便程序员进行页面快速布局和构建 官网 :http://element-cn.eleme

    2024年02月02日
    浏览(38)
  • 尚医通day11-Java中阿里云对象存储OSS

    用户登录成功后都要进行身份认证,认证通过后才可以预约挂号。 认证过程:用户填写基本信息(姓名、证件类型、证件号码和证件照片),提交平台审核 用户认证相关接口: (1)上传证件图片 (2)提交认证 (3)获取认证信息 用户认证需要上传证件图片,因此我们要做

    2024年02月08日
    浏览(94)
  • 尚医通-day12【token续期和就诊人管理】(内附源码)

    ![image-20230225060710 前面我们完成了用户登录、用户认证与就诊人管理,现在我们需要把这些信息在我们的平台管理系统中进行统一管理 简单的设置redis和cookie的过期时间,会导致用户在操作的过程中掉线,为了解决这个问题,我们可以使用token续期的方案,具体的做法是生成一

    2024年02月09日
    浏览(45)
  • 尚医通day01-【项目环境搭建和医院设置详细步骤】(内附源码)

    项目名称: 尚医通预约挂号统一平台 项目原型: https://www.114yygh.com 北京市预约挂号统一平台 项目技术栈: 前后端分离 后端技术:SpringBoot + SpringCloud + MyBatisPlus + MySQL + MongoDB + Redis + RabbitMQ + Docker + EasyExcel + API远程接口调用 + SDK远程接口调用 + 对称加密和非对称加密 + 数字签

    2024年02月08日
    浏览(40)
  • 【数据库管理】⑩数据字典

     1. 数据字典的概述 数据字典(Data Dictionary) 是数据库管理系统中的一个重要组成部分,它 是一个存储数据库元数据的集合,包含了数据库中所有对象的定义和描述信息。 数据字典可以帮助用户了解数据库中的各种对象和数据结构,以及它们之间的关系和依赖关系。 数据字

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包