网站建设需要知识,wordpress用lanmp,电子商务网站建设与管理试题答案,网站配色案例分析内容介绍 1、数据字典列表前端 2、EasyExcel介绍、实例 3、数据字典导出接口、前端 4、数据字典导入接口、前端 5、数据字典添加redis缓存 6、MongoDB简介 7、MongoDB安装 8、MongoDB基本概念 数据字典列表前端 1、测试问题 #xff08;1#xff09;报错日志 1报错日志 2问题定位 URL错误 3解决问题 2、nginx 1基本功能 反向代理、负载均衡、动静分离 2安装 解压即可使用 3启动 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 6改造前端 重启生效 EasyExcel介绍、实例 1、是什么 EasyExcel是阿里巴巴开源的一个excel处理框架以使用简单、节省内存著称。 2、为什么 没有将文件数据一次性全部加载到内存中而是从磁盘上一行行读取数据逐个解析。 3、准备工作 1cmn导入依赖 dependencies!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --dependencygroupIdcom.alibaba/groupIdartifactIdeasyexcel/artifactIdversion2.1.1/version/dependency/dependencies 2创建目录、创建实体 Datapublic 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 ListStu data() {ListStu list new ArrayListStu();for (int i 0; i 10; i) {Stu data new Stu();data.setSno(i);data.setSname(张三i);list.add(data);}return list;}} 5、实现读操作 1改造实体 Datapublic class Stu {//设置表头名称
ExcelProperty(value 学生编号,index 0)private int sno;//设置表头名称
ExcelProperty(value 学生姓名,index 1)private String sname;} 2创建监听器 public class ExcelListener extends AnalysisEventListenerStu {Overridepublic void invoke(Stu stu, AnalysisContext analysisContext) {//可以实现调用接口数据入库
System.out.println(stu stu);}//读取excel表头信息
Overridepublic void invokeHeadMap(MapInteger, String headMap, AnalysisContext context) {System.out.println(表头信息headMap);}Overridepublic 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确认依赖 2确认对象 2、实现导出接口 1分析接口 *参数response *返回值无 2实现controller ApiOperation(value导出)GetMapping(value /exportData)public void exportData(HttpServletResponse response) {dictService.exportData(response);} 3实现service //导出
Overridepublic 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查询数据字典表数据ListDictListDict dictList baseMapper.selectList(null);//3遍历集合ListDict转型ListDictEeVoListDictEeVo 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 classel-toolbardiv classel-toolbar-body stylejustify-content: flex-start;el-button typetext clickexportDatai classfa fa-plus/ 导出/el-button/div/div2实现js方法//导出数据exportData(){window.open(${process.env.VUE_APP_BASE_API}admin/cmn/dict/exportData)} 3测试 数据字典导入、前端 1、数据字典导入接口 1分析接口 *参数:file *返回值:R.ok() 2实现controller ApiOperation(value 导入)PostMapping(importData)public R importData(MultipartFile file) {dictService.importData(file);return R.ok();} 3创建监听器 Componentpublic class DictListener extends AnalysisEventListenerDictEeVo {Autowiredprivate DictMapper dictMapper;//手动注入使用有参构造
//private DictMapper dictMapper;Overridepublic void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {//1转化数据类型DictEeVo》DictDict dict new Dict();BeanUtils.copyProperties(dictEeVo,dict);//2补充数据
dict.setIsDeleted(0);//3数据入库
dictMapper.insert(dict);}Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}} 4实现service Autowiredprivate DictListener dictListener; //导入
Overridepublic 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测试 2、对接前端 1分析需求 2查看组件 3添加页面元素 div classel-toolbar div classel-toolbar-body stylejustify-content: flex-start; el-button typetext clickexportData i classfa fa-plus/ 导出 /el-button el-button typetext clickimportDatai classfa fa-plus/ 导入/el-button /div /div el-dialog title导入 :visible.syncdialogImportVisible width480px el-form label-positionright label-width170px el-form-item label文件 el-upload :multiplefalse :on-successonUploadSuccess :actionBASE_URLadmin/cmn/dict/importData classupload-demo el-button sizesmall typeprimary点击上传/el-button div slottip classel-upload__tip只能上传xls文件且不超过500kb/div /el-upload /el-form-item /el-form div slotfooter classdialog-footer el-button clickdialogImportVisible 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缓存 1、redis回顾 2、准备工作 1虚拟机 2安装redis 3检查配置 4启动redis 3、redis缓存访问机制 4、整合redis 1common_utils模块添加redis依赖 dependencies!-- redis --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-data-redis/artifactId/dependency!-- spring2.X集成redis所需common-pool2--dependencygroupIdorg.apache.commons/groupIdartifactIdcommons-pool2/artifactIdversion2.6.0/version/dependency/dependencies 2common_utils模块添加Redis配置类 ConfigurationEnableCachingpublic class RedisConfig {/*** 设置RedisTemplate规则
* param redisConnectionFactory* return*/Beanpublic RedisTemplateObject, Object redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplateObject, Object redisTemplate new RedisTemplate();redisTemplate.setConnectionFactory(redisConnectionFactory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer new Jackson2JsonRedisSerializer(Object.class);//解决查询缓存转换异常的问题
ObjectMapper om new ObjectMapper();// 指定要序列化的域field,get和set,以及修饰符范围ANY是都有包括private和publicom.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);// 指定序列化输入的类型类必须是非final修饰的final修饰的类比如String,Integer等会跑出异常
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);//序列号key valueredisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);redisTemplate.afterPropertiesSet();return redisTemplate;}/*** 设置CacheManager缓存规则
* param factory* return*/Beanpublic CacheManager cacheManager(RedisConnectionFactory factory) {RedisSerializerString 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.host192.168.140.138spring.redis.port6379spring.redis.database 0spring.redis.timeout1800000spring.redis.lettuce.pool.max-active20spring.redis.lettuce.pool.max-wait-1#最大阻塞等待时间(负数表示没限制)spring.redis.lettuce.pool.max-idle5spring.redis.lettuce.pool.min-idle0 (4)查询方法添加注解 Override// redis k:v kdict::selectIndexList vListDictCacheable(value dict, key selectIndexList)public ListDict findChildData(Long id) {//1拼写查询条件
LambdaQueryWrapperDict wrapper new LambdaQueryWrapper();wrapper.eq(Dict::getParentId,id);//2查询子数据集合
ListDict dictList baseMapper.selectList(wrapper);//3遍历集合,确认是否有子数据
for (Dict dict : dictList) {boolean isChildren this.isChildren(dict);dict.setHasChildren(isChildren);}return dictList;} 5、问题解决 1问题描述 *一级数据可以走缓存 *二级数据加载不出来 2问题定位 *二级数据查询需要查询数据库 *二级数据没有查询数据库查询缓存获取一级数据 3解决方案 让多次查询redis缓存的key不一样 //根据数据id查询子数据列表
Override// redis k:v kdict::selectIndexList vListDictCacheable(value dict, key selectIndexList#id)public ListDict findChildData(Long id) {//1拼写查询条件
LambdaQueryWrapperDict wrapper new LambdaQueryWrapper();wrapper.eq(Dict::getParentId,id);//2查询子数据集合
ListDict dictList baseMapper.selectList(wrapper);//3遍历集合,确认是否有子数据
for (Dict dict : dictList) {boolean isChildren this.isChildren(dict);dict.setHasChildren(isChildren);}return dictList;} 4、redis缓存写操作同步机制 MongoDB简介 1 NoSQL概述 2、MongoDB是什么 MongoDB 是由C语言编写的是一个基于分布式文件存储的开源数据库系统。 MongoDB 是文档型NOSQL数据库
MongoDB安装 1、安装 1确认docker服务 2下载 docker pull mongo:latest docker pull mongo:4.4.8 3创建和启动容器 docker run -d --restartalways -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo:4.4.8 (4)进入容器 docker exec -it mymongo /bin/bash 5进入mongo mongo 新版本mongosh MongoDB概念介绍 1、与mysql对比 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数据类型