spring cloud+vue在线视频网站 4.单表查询功能前后端开发

news/2024/5/9 19:14:49/文章来源:https://blog.csdn.net/Mosiclone/article/details/109105991

1 大章列表查询后端模块

这里首先新建一个 Maven 模块,取名 busines 。这个模块的具体功能是实现大章列表的查询,在模块中会有启动类和 controller 层,controller 层是前端调用后端的接口,controller 层通过 server 模块中的 service 层和 mybatis-generator 代码生成的 XML 查询语句得到对应的数据,并将其通过 dto 数据传输类返回到前端。
从前面的描述可以知道,首先我们需要完成 business 模块的内容填充;然后用 mybatis-generator 生成 domain 实体类、Mapper 查询接口和包含 SQL 语句的 XML 文件;在 server 模块中新建 dto 数据传输层;最后为了测试功能会建立一个数据库表并添加测试字段。

1 填充 business 模块

最终完成后的结构如下图,可以自己尝试一下照着 system 模块写一下。
在这里插入图片描述
这里把 ChapterController 放到了新的包里是为了区别后面不同用户登陆后的区别。
business 模块各部分代码如下:

BusinessApplication.java

package com.course.business.config;import org.mybatis.spring.annotation.MapperScan;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.env.Environment;@SpringBootApplication
@EnableEurekaClient
@ComponentScan("com.course")
@MapperScan("com.course.server.mapper")
public class BusinessApplication {private static final Logger LOG = LoggerFactory.getLogger(BusinessApplication.class);//	public static void main(String[] args) {
//		SpringApplication.run(EurekaApplication.class, args);
//	}public static void main(String[] args){SpringApplication app = new SpringApplication(BusinessApplication.class);Environment env = app.run(args).getEnvironment();LOG.info("启动成功!");LOG.info("Business地址:\t http://127.0.0.1:{}",env.getProperty("server.port"));}}

ChapterController.java 这里的返回类型已经对应了后面添加 dto 层的时态

package com.course.business.controller.admin;import com.course.server.domain.Chapter;
import com.course.server.dto.ChapterDto;
import com.course.server.service.ChapterService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;
import java.util.List;@RestController
@RequestMapping("/admin")
public class ChapterController {@Resourceprivate ChapterService chapterService;@RequestMapping("/chapter")public List<ChapterDto> chapter(){return chapterService.list();}
}

application.properties 端口号加一

spring.application.name=business
server.port=9002server.servlet.context-path=/businesseureka.client.service-url.defaultZone=http://localhost:8761/eureka/

pom.xml 将 system 模块中引入的 dependencies 加入。

2 mybatis-generator 生成代码

将最下面的<table tableName="test" domainObjectName="Test"></table>修改为<table tableName="chapter" domainObjectName="Chapter"></table>,然后运行 mybatis-generator,可以看到 server 模块中的 domain 层、mapper 层和 resources/mapper 中都生成了对应的代码。
这里 service 层需要手动写一下,具体只需要将 test 改为 chapter,Test 改为 Chapter 即可。

3 添加 dto 数据传输层

因为有时我们不需要持久层中的所有信息,如果需要修改传输的部分信息需要在对应的所有地方修改一遍,这样效率就很低。于是,我们新建了一个 dto 数据传输层,如果需要对数据进行一定的处理直接在这个类中修改即可,节省了许多时间。
这里因为并不需要对持久层的 chapter 进行什么处理,就直接复制到 dto 包中。
前面 business/controller 层我们已经将返回的数据类型改为 ChapterDto 类型,所以有些类会报错,先修改 server/service 层,将每个得到的 Chapter 对象进行处理后得到 ChapterDto 类型的对象返回给控制层,这里如果只是选择部分数据传回可以使用 BeanUtils 中的 copyProperties 方法。

package com.course.server.service;import com.course.server.domain.Chapter;
import com.course.server.domain.ChapterExample;
import com.course.server.dto.ChapterDto;
import com.course.server.mapper.ChapterMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;@Service
public class ChapterService {@Resourceprivate ChapterMapper chapterMapper;public List<ChapterDto> list(){ChapterExample chapterExample = new ChapterExample();List<Chapter> chapterList = chapterMapper.selectByExample(chapterExample);List<ChapterDto> chapterDtosList = new ArrayList<>();for (int i = 0; i < chapterList.size(); i++) {Chapter chapter = chapterList.get(i);ChapterDto chapterDto = new ChapterDto();BeanUtils.copyProperties(chapter,chapterDto);chapterDtosList.add(chapterDto);}return chapterDtosList;};
}

这里修改过后一些类因为类型问题会报红,把 Chapter 修改为 ChapterDto 就行。

4 新建数据库表并测试 business 模块

这里用之前新建的 doc/db/all.sql 来建新表和添加数据,用 MySQL 和 Navicat也可以。在 all.sql 运行下面语句。

drop table if exists `chapter`;
create table `chapter` (`id` char(8) not null comment 'ID',`course_id` char(8) comment '课程ID',`name` varchar(50) comment '名称',primary key(`id`)
)engine=innodb default charset=utf8mb4 comment='大章';insert into chapter values ('00000000','00000001','测试第一章');
insert into chapter values ('00000001','00000001','测试第一章');

接着启动 eureka 和 business ,进入后http://127.0.0.1:9002/business/admin/chapter显示如下图片,说明模块没有问题。
在这里插入图片描述

2 大章列表查询前端页面

在这一部分需要处理的有新建 chapter 对应的前端页面,修改路由配置。

1 新建 chapter 页面

在 admin 包中新建一个 chapte.vue 文件,这里是大章查询,主要是为了查询大章并将结果显示。所以在 ace 模板中找到了 table.html ,将页面的一个表格部分放到了 chapter.vue 页面中。
在这里插入图片描述
这时 chapter.vue 代码如下:

<template><table id="simple-table" class="table  table-bordered table-hover"...></template>

2 修改路由

之前在 login 页面登陆后会进入到 admin 页面,但是业务逻辑应该是点击 login 后会进入到 welcome 页面,并且 admin 页面对于用户来说是透明的。所以在这里会修改下路由,让登陆后会直接跳到 welcome,并且在请求路径中不会显示出 admin。
首先在 login.vue 修改跳转路径

<script>export default {name: "login",mounted: function(){$('body').removeClass('no-skin');$('body').attr('class', 'login-layout light-login');},methods: {login(){this.$router.push("/welcome")}}}
</script>

然后在 router.js 添加 chapter 页面并删除请求路径中到 /admin,然后在 admin 包含的页面中添加 name 属性,方便后序页面跳转的逻辑。

import Vue from "vue"
import Router from "vue-router"
import Login from "./views/login.vue"
import Admin from "./views/admin"
import Welcome from "./views/admin/welcome"
import Chapter from "./views/admin/chapter"Vue.use(Router)export default new Router({mode: "history",base: process.env.BASE_URL,routes: [{path: "*",redirect: "/login",}, {path: "/login",component: Login,}, {path: "/",name: "admin",component: Admin,children: [{path: "welcome",name: "welcome",component: Welcome,}, {path: "business/chapter",name: "business/chapter",component: Chapter,}]}]
})

最后在 admin.vue 中添加菜单栏中 welocme 和 大章管理 的跳转功能和激活样式。
主要修改是将 herf 属性修改为 <router-link to="/.."> ,下面对应的</router-link>,还有上面增加 id="welcome-sidebar",增加的 id 是为了增加激活样式。

同样的修改下面的 大章管理 ,最后 nav-list 部分的代码如下:

 <ul class="nav nav-list"><li class="" id="welcome-sidebar"><router-link to="/welcome"><i class="menu-icon fa fa-tachometer"></i><span class="menu-text"> welcome </span></router-link><b class="arrow"></b></li><li class=""><a href="#" class="dropdown-toggle"><i class="menu-icon fa fa-file-o"></i><span class="menu-text">系统管理<span class="badge badge-primary">5</span></span><b class="arrow fa fa-angle-down"></b></a><b class="arrow"></b><ul class="submenu"><li class=""><a href="faq.html"><i class="menu-icon fa fa-caret-right"></i>用户管理</a><b class="arrow"></b></li><li class=""><a href="error-404.html"><i class="menu-icon fa fa-caret-right"></i>权限管理</a><b class="arrow"></b></li></ul></li><li class="active open"><a href="#" class="dropdown-toggle"><i class="menu-icon fa fa-file-o"></i><span class="menu-text">业务管理<span class="badge badge-primary">5</span></span><b class="arrow fa fa-angle-down"></b></a><b class="arrow"></b><ul class="submenu"><li class="active" id="business-chapter-sidebar"><router-link to="/business/chapter"><i class="menu-icon fa fa-caret-right"></i>大章管理</router-link><b class="arrow"></b></li></ul></li></ul><!-- /.nav-list -->

admin.vue 中增加激活样式代码如下,activeSidebar 函数作用是改变激活样式,让当前点击的组件显示激活。

<script>export default {name: "admin",mounted: function(){let _this = this;$('body').removeClass('login-layout light-login');$('body').attr('class', 'no-skin');_this.activeSidebar(_this.$route.name.replace("/","-")+"-sidebar");},methods: {activeSidebar: function (id) {$("#"+id).siblings().removeClass("active");$("#"+id).siblings().find("li").removeClass("active");$("#"+id).addClass("active");let parentLi = $("#"+id).parents("li");if(parentLi){parentLi.siblings().removeClass("active open");parentLi.addClass("active open");}}},watch:{$route:{handler: function () {let _this = this;_this.$nextTick(function () {_this.activeSidebar(_this.$route.name.replace("/","-")+"-sidebar");})}}}}
</script>

3 解决前后端交互

前面已经把单表查询的前端页面和后端模块完成了,现在需要完成前后端的交互,这里用到的事 axios 来进行前后端的交互;此时如果后端向前端传递数据会产生跨域的问题,这里把处理类放在 gateway 模块下面;之前用的 table 的格式也需要对应后端的数据进行一下改动。

1 前端使用 axios

首先需要安装 axios ,terminal 进入 admin 中运行npm install axios --save 下载并依赖 axios ,然后到 main.js 中引入。

main.js 代码如下:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import axios from 'axios'Vue.config.productionTip = false
Vue.prototype.$ajax = axiosnew Vue({router,render: h => h(App),
}).$mount('#app')

接着在 chapter.vue 中使用 axios 请求数据,代码如下:

<script>export default {name: "chapter",mounted: function(){let _this = this;_this.list();},methods: {list() {let _this = this;_this.$ajax.get('http://127.0.0.1:9002/business/admin/chapter/list').then((response)=>{console.log(response);})}}}
</script>

这里可以在控制台看到因为跨域报错了,但是请求应该是成功了。

2 解决跨域问题

在 GatewayApplication 中我们添加跨域配置代码:

	//跨域配置@Beanpublic CorsWebFilter CrosFilter(){CorsConfiguration config = new CorsConfiguration();config.setAllowCredentials(Boolean.TRUE);config.addAllowedMethod("*");config.addAllowedOrigin("*");config.addAllowedHeader("*");config.setMaxAge(3600L);UrlBasedCorsConfigurationSource source= new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration("/**",config);return new CorsWebFilter(source);}

同时也可以选择在 server 中配置:

package com.course.server.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;//@Configuration
//public class CorsConfig implements WebMvcConfigurer {
//    @Override
//    public void addCorsMappings(CorsRegistry registry) {
//        registry.addMapping("/**")
//                .allowedOrigins("*")
//                .allowedHeaders(CorsConfiguration.ALL)
//                .allowedMethods(CorsConfiguration.ALL)
//                .allowCredentials(true)
//                .maxAge(3600);
//    }
//}

我选择了在 gateway 中配置,所以还要在 application.properties 中增加路由转发设置:

spring.cloud.gateway.routes[1].id=business
spring.cloud.gateway.routes[1].uri=http://127.0.0.1:9002
#spring.cloud.gateway.routes[1].uri=lb://business
spring.cloud.gateway.routes[1].predicates[0].name=Path
spring.cloud.gateway.routes[1].predicates[0].args[0]=/business/**

如果不用 gateway 设置跨域,chapter 中的请求路径就不需要改变,我这里把请求路径中的端口 9002 改为了 9000。
刷新页面,这时成功取得后端的数据:
在这里插入图片描述

3 修改 table 样式

这里我们不需要显示之前的 checkbox、details 之类的数据,我们把表头先分别修改成 id、名称 和 课程,后面的操作按钮留下来。然后在表身中用一个 v-for 循环显示所有数据。
chapter最终代码如下:

<template><table id="simple-table" class="table  table-bordered table-hover"><thead><tr><th>ID</th><th>名称</th><th>课程</th><th>操作</th></tr></thead><tbody><tr v-for="chapter in chapters" v-bind:key="chapter"><td>{{chapter.id}}</td><td>{{chapter.name}}</td><td>{{chapter.courseId}}</td><td><div class="hidden-sm hidden-xs btn-group"><button class="btn btn-xs btn-success"><i class="ace-icon fa fa-check bigger-120"></i></button><button class="btn btn-xs btn-info"><i class="ace-icon fa fa-pencil bigger-120"></i></button><button class="btn btn-xs btn-danger"><i class="ace-icon fa fa-trash-o bigger-120"></i></button><button class="btn btn-xs btn-warning"><i class="ace-icon fa fa-flag bigger-120"></i></button></div><div class="hidden-md hidden-lg"><div class="inline pos-rel"><button class="btn btn-minier btn-primary dropdown-toggle" data-toggle="dropdown" data-position="auto"><i class="ace-icon fa fa-cog icon-only bigger-110"></i></button><ul class="dropdown-menu dropdown-only-icon dropdown-yellow dropdown-menu-right dropdown-caret dropdown-close"><li><a href="#" class="tooltip-info" data-rel="tooltip" title="View"><span class="blue"><i class="ace-icon fa fa-search-plus bigger-120"></i></span></a></li><li><a href="#" class="tooltip-success" data-rel="tooltip" title="Edit"><span class="green"><i class="ace-icon fa fa-pencil-square-o bigger-120"></i></span></a></li><li><a href="#" class="tooltip-error" data-rel="tooltip" title="Delete"><span class="red"><i class="ace-icon fa fa-trash-o bigger-120"></i></span></a></li></ul></div></div></td></tr></tbody></table></template><script>export default {name: "chapter",data: function(){return{chapters:[]}},mounted: function(){let _this = this;_this.list();},methods: {list() {let _this = this;_this.$ajax.get('http://127.0.0.1:9000/business/admin/chapter/list').then((response)=>{console.log(response);_this.chapters = response.data;})}}}
</script>

最后,我们完成了单表页面查询的前端页面,后端查询和前后端交互的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_894730.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring cloud+vue在线视频网站 5.分页功能+增加章节

1 分页功能开发 首先集成分页功能需要先在 Maven 中添加 pagehelper 依赖&#xff0c;然后在 ChapterService 中添加 pagehelper 的设置&#xff0c;接着试一下分页功能是否生效。后面添加分页功能的具体细节&#xff0c;第一修改成后端接收分页要求&#xff0c;第二修改前端分…

spring cloud+vue在线视频网站 6.章节编辑删除功能、前端优化和校验模块

这一节增加了大章的编辑和删除功能&#xff0c;这样大章的增删改查功能就都有了&#xff0c;但是在增加和修改时应该还要有校验功能。 编辑功能 这一节主要对大章模块增加编辑功能&#xff0c;其次还删除一些多余组件。首先&#xff0c;我们将多余对按钮进行了删除&#xff0…

spring cloud+vue在线视频网站 7.代码生成模块 part 1

这一章主要是完成代码生成的模块&#xff0c;用到的工具是 freemaker &#xff0c;在完成代码生成模块的同时会完成小节部分的代码。 freemaker 的基本用法 一般来说一个 freemaker 的模版基本会包括下面四部分。 文本:直接输出的部分 注释:<#–2333–>格式部分,不会输…

网站检测方式个人总结

这几天看架构看的头晕&#xff0c;觉得有点看不下去了 换个心情&#xff0c;等状态调整过来再继续看 趁这个时间休息一些&#xff0c;也正好把之前学过的知识做一个总结。 首先表明立场 这只是一个总结 并不是教大家什么 我的水平没有那么高 这是一个提醒自己的备忘 但是如果有…

用了2周时间,终于把Python网站开发库大全整理完了

用了 2 周的时间整理了 Python 中所有的网站开发库&#xff08;下文简称&#xff1a;Web 框架&#xff09;&#xff0c;供大家学习参考。 相关文件 小伙伴们可以关注小编的Python源码、问题解答&学习交流群&#xff1a;733089476 有很多的资源可以白嫖的哈&#xff0c;需…

今天给大家介绍一下~我学习 Python 的 三个神级网站

今天来给大家介绍三个我在学习 Python 路上帮助比较大的堪称神级的网站&#xff0c;尤其是对于刚刚入门的同学来说&#xff0c;绝对不容错过~ 相关文件 小伙伴们可以关注小编的Python源码、问题解答&学习交流群&#xff1a;733089476 有很多的资源可以白嫖的哈&#xff0…

WEB网站加速CND加速工作原理

转自&#xff1a;https://blog.csdn.net/5hongbing/article/details/78025349 通过传统的未加缓存服务的访问过程与加缓存服务的访问过程对比&#xff0c;了解CDN缓存访问方式与未加缓存访问方式的差别。 1.传统访问过程(未加速缓存服务) 访问未使用CDN缓存后的网站的过程&…

逛Github网站显示中文教程

打开Github对于看不懂英文的孩子来说刚打开官网就尬住了&#xff0c;后来逛了很多网站才发现一个方法可以将网站的部分内容转换为中文&#xff0c;虽然说是部分的&#xff0c;但是也够用了差不多。下面放教程。 1.找到自己浏览器安装扩展插件的地方&#xff0c;我测试的360浏览…

三日娱乐活动之——建立自己的网站

目录 云服务器搭建SSH登陆LNMP环境的搭建Nginx的设置小节总结 网页的编写CSS的调用php文件上传小节总结 云服务器搭建 我用的是阿里云的学生机&#xff0c;自己娱乐娱乐够用了&#xff0c;稍微懂点Linux的知识&#xff0c;选择Centos7的系统就可以耍了。 SSH登陆 我直接用密…

Vs2010创建网站

1.打开VS2010&#xff0c;新建——网站——ASP.Net空网站。 2.创建网站后你会发现你的项目并没有.sln结尾的文件&#xff0c;像这样。 事实上项目的.sln文件保存到了C:\Users\zjs\Documents\Visual Studio 2010\Projects 我一般会把这个.sln文件拷贝到项目所对应的文件夹目录。…

公安内网部署网站出现500.19-Internal Server Error

今天去桂林叠彩分局&#xff0c;帮他们部署一个内网平台的网站。去了机房&#xff0c;windowserver2012系统已装好。我本想我的工作会很快弄完。无非就是在这个系统上安装一个oracle数据库&#xff0c;然后在iis部署一个网站&#xff0c;网站能呈现数据就ok了。Oracle数据库安装…

我的网站收入

建站有好几个月了&#xff0c;但申请google adsense和阿里妈妈并且成功通过却是上个月的事情。到目前为止&#xff0c;google adsense帐户的估算总收入为1.79美元&#xff0c;阿里妈妈的收入为2.52元&#xff0c;看到这里&#xff0c;或者很多读者都会嗤之以鼻&#xff0c;甚至…

没有网站也能网赚

如果你能持之以恒&#xff0c;而且文档质量高的话&#xff0c;那么月入过万也不是没有可能的。 2009年5月&#xff0c;我在建站的过程中为了找点资料&#xff0c;通过搜索引擎搜索到了豆丁&#xff0c;还记得当时是为了搜索关于google map的资料&#xff0c;很多地方都没有找到…

前端常见SEO注意事项

前端开发工程师不仅需要要跟视觉设计师、交互式设计师配合&#xff0c;完美还原设计图稿&#xff0c;编写兼容各大浏览器、加载速度快、用户体验好的页面。现在还需要跟SEO人员配合&#xff0c;调整页面的代码结构和标签。 一些成熟的平台&#xff0c;在开发初期并没有考虑优化…

精通Web Analytics 2.0 (3) 第一章:网站分析的新奇世界

精通Web Analytics 2.0 &#xff08;3&#xff09; 第一章&#xff1a;网站分析的新奇世界 精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第一章&#xff1a;Web Analytics 2.0的新奇世界 多年以来&#xff0c;我们很清楚的知道&#xff0c;网站分析能够真正的改革网络…

精通Web Analytics 2.0 (12) 第十章:针对潜在的网站分析陷阱的最佳解决方案

精通Web Analytics 2.0 &#xff08;12&#xff09; 第十章&#xff1a;针对潜在的网站分析陷阱的最佳解决方案 精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第十章&#xff1a;针对潜在的网站分析陷阱的最佳解决方案 是时候去处理网站分析中最棘手的一些问题了&…

学习Python一定要知道的八个网站,看看你知道几个

导语 最近很多人问我有没有可以跟着学习的网站&#xff0c;一个人学没方向&#xff0c;老是不知道该怎么学习&#xff0c;我今天就把自己知道的几个网站分享给大家&#xff0c;那些问我的小伙伴可以根据这个去找自己喜欢的网站哦! python是一个编程语言&#xff0c;相比其他的…

阿里云ECS建站全流程(Debian)

1. 购买域名和ECS服务器 2. 环境配置 2.1 官方教程位置 这里是按照官网上的教程进行的&#xff0c;入口如下图所示&#xff1a; 官网的教程就不抄下来了&#xff0c;看官网就行。本文章只记载官网内容之外需要补充的操作。 2.2 安装yum 因为购买服务器时选择的Debian&…

sqlmap如何用dirsearch.py协助--os -shell拿到目标网站shell

本文为博主原创文章首发于FreeBuf→https://www.freebuf.com/sectool/256588.html SQLMAP sqlmap是一个开源渗透测试工具&#xff0c; 它可以自动检测和利用SQL注入漏洞并接管数据库服务器。它具有强大的检测引擎&#xff0c;同时有众多功能&#xff0c;包括数据库指纹识别、从…