4.MidBook项目经验之MonogoDB和easyExcel导入导出

1.数据字典(固定的数据,省市级有层级关系的)

   //mp表如果没有这个字段,防报错,eleUI需要这个字段
    @TableField(exist =false) 
  //父根据id得到子数据  ,从controller开始自动生成代码-->service
  //hasChildren怎么判断,只需要判断children的parentid的count数量>0就可以了
     //优化循环
     dictList.stream().map(dict -> {dict.setHasChildren(isChildren(dict.getId()))
    //因为是微服务,前端使用统一的访问路径,所以要使用nginx进行转发
    //eleUI版本太低无法显示层级,需要改版本2.12.0,去文件夹node_moudle删除依赖重新安装 

2.easyExcel

  1. 导入依赖
  2. 写实体类 写注解
  3. 代码
    //写
    //传入文件路径和list实体类集合
    EasyExcel.write(filename,UserData.class).sheet(“用户信息”)
    .doWrite(list);
    //读,创建监听器读数据 extends AnalysisEventListener invoke一行一行读数据,after读完做的事,head读取头(0行)
    EasyExcel.read(filename,UserData.class,new ExcelListener()).sheet().doRead();

3.整合easyexcel导出

  1. response对象可以设置头信息导出文件
  2. 复制对象到另外一个不同类型的对象中BeanUtil.copyProperties(dict,dictEeVo)
  3. 通过流写入response
  4. 前端直接调用导出的接口下载文件
    //当前页面打开 ,使用全局变量,以防后期改动
window.location.href=process.env.BASE_API+"/admin/cmn/dict/exportData";
         //优化a标签另外一个页面打开  target="_blank",

4.上传excel 导入数据到数据库

  1. !!!通过excel监听器的无参构造,传入外部的mapper对象插入(listener就不用注入了)
  2. 实体类继承baseEntity设置了自动增长,导致不能插入值,需要直接解除继承复制属性到类
  3. 增加缓存(不经常修改,固定的,经常查询的数据) spring cache+redis(注解一键式生成key)
      //写配置文件和配置类,写在方法上,写在service上
  @Cacheable(value="dict",keyGenerator="keyGenerator")放缓存中,两个拼接成为key 
          @CachePut添加缓存
          @CacheEvict清空指定缓存
        keys *

5.nginx解决多端口访问问题
1.下载nginx打开nginx.conf,放到http里面

         location ~ /hosp/ {  //~代表正则匹配,+路径
			 proxy_pass http://localhost:8201;
         }
        location ~ /cmn/ {
			 proxy_pass http://localhost:8202;
         }

2.前端改baseURI改为nginx的9001的访问端口

6.mongoDB

  1. 安装
    docker pull mongo:latest
    docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo
    docker exec -it mymongo /bin/bash
    mongo //新版本mongosh
    show dbs
  2. 优点 对数据库高并发读写海量数据高效存储和访问,数据库可扩展和高可用
  3. 缺点 事务一致性,读写实时性,复杂的sql查询(不能多表查询)
  4. 存储类似json(bson)的对象key和value,c++写的
  5. 与mysql的区别table-> collection , row->document column–>field
  6. 根据对应的规则会生成id
  7. springboot整合MongoDB 配置端口号和地址,实体类 @Document(“User”)
  8. 查询 Query(Criterion.where(“name”).is(“jams”).and(“age”).is(20).and(“aa”).regex(pat));//链式编程构建条件,正则表达式代替模糊查询
    //普通的mongo包
    //分页查询,查出所有页,.skip((pageNo-1)*pageSize).limit(pageSize)
    //修改先查后改
    //删除都返回影响行数
  9. 使用 spring data整合(统一数据库操作方式)
    继承 MongoRepository
    of(user,matcher)
    //分页 PageRequest.of(0,3);
    MongoRepository操作简单,MongoTemplate操作灵活根据使用场景可以互补缺点
    模糊查询

7.医院平台系统Http调用医院后台系统的接口,得到数据

8.上传医院接口,需要MongoDB,service注入对象,然后在controller创建api文件夹专门的对外接口

   //通过controller直接调用service方法 

9.一个系统调用另外一个系统用http工具调用,!!!用req对象接收map转json,再转实体类

10.nb!!!spring data的mongo可以写方法名为read/find/get开头和一定规范
findByHcodeAndId
如:

public interface DepartmentRepository extends MongoRepository<Department,String> {




    Department findDepartmentByHoscodeAndDepcode(String hoscode,String depcode);

    List<Department> findDepartmentByHoscode(String hoscode);
}

11.使用nosqlbooster4mongo可视化mongo

12.数据库的签名进行加密(包括增加时间2023-10-11动态变化使黑客不能破解)与 外界传过来签名对比
图SignEncode的原因.png
4.MidBook项目经验之MonogoDB和easyExcel导入导出_第1张图片

13.传输过程中json数据的base64数据的加号变成空格,(mongo可以存图片,要是存在mysql直接炸了)

14.怎么测试base64图片是否可以显示
写html

<img src="data:image/png;base64,数据"/>

15.set实体为Json数据想要set和get(对象内)转换

public void setBookingRule(String bookingRule) {
	this.bookingRule = JSONObject.parseObject(bookingRule, BookingRule.class);
}

你可能感兴趣的:(MidBook项目经验,项目经验)