首页 > 编程语言 >基于java的城市公交查询系统Vue3+SpringBoot

基于java的城市公交查询系统Vue3+SpringBoot

时间:2024-09-17 21:22:32浏览次数:13  
标签:Vue return SpringBoot 公交查询 系统 user userService java public

目录

功能和开发技术介绍

本课题拟采用主流的MVC架构、开发工具idea、java语言编程、MySQL数据库技术、Vue.js技术和现代网络通讯技术来完成。
1.前后端分离项目,前端使用vue3框架
2.后端使用java编程语言的springboot框架
3.项目中登录模块用到token
4.源码包部署调试
5.每个笔记均有对应源码
数据库:mysql5.7/8.0或以上版本
持久化层使用Mybatis,项目管理Maven3,
项目中登录模块用到token
本文介绍了使用SpringBoot作为后端框架,Vue作为前端框架,MyBatis-Plus进行持久层开 。详细描述了系统测试的目的、功能测试案例,包括登录验证和用户管理,以及数据库设计。
前端:vue3
开发工具:IDEA 或者eclipse都支持
编程语言: java
框架:springboot/ssm都支持
jdk版本:jdk1.8以上均可
数据库: mysql 版本不限
数据库工具:Navicat/SQLyog都可以
技术范围:SpringBoot、Nodejs、Python、Vue、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习、SSM、HLMT、Jsp、PHP等设计与开发。

前后端分离Vue3+SpringBoot

具体实现截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开发核心技术介绍:

Vue.js的核心是虚拟DOM技术。虚拟DOM是一个内存中的数据结构,它可以帮助Vue.js实现高效的DOM操作,它采用了响应式数据绑定、虚拟DOM、组件化等现代化技术,为开发者提供了一种灵活、高效、易于维护的开发模式,当数据发生变化时,UI也会自动更新,这样就使得开发者可以更加专注于数据处理,而不是手动更新UI,这就是Vue体现出来的简洁,灵活,高效。
Java具有面向对象编程的特点,通过可视化开发可以快速的创建一个应用程序,减少程序员的工作量,Java是一种简洁、现代、通用的语言,具有垃圾收集机制,通过内存释放技术完成各种定义类型的回收,具有较强的编程能力。Java编译后生成Dll文件,其他程序可以通过对应的接口实现操作[15]。
Java具有典型的继承、封装多态特征,可以使用类和接口,并进行输入输出数据流,支持多线程和反射、以及网络编程。Java语言的多态提供方法中的和复写,Java语言不仅仅可以支持后台框架的开发,也可以与web前端进行融合[16]。
Spring Boot的一个主要优点是它的自动配置功能。它可以根据你的项目中的依赖关系自动配置应用程序。这使得配置应用程序变得非常容易,因为你不需要手动配置每个依赖项。
Spring Boot内置了Tomcat、Jetty和Undertow等服务器,这意味着你可以直接使用它们而不需要额外的安装和配置。
Mybatis是基于Mysql的一个优秀的持久层框架,其几乎将所有连接Java语言需要配置的地方包括JDBC都封装起来,不在向JDBC那样繁琐,让开发人员专注于编写SQL语句,其内部页添加了许多自己的规则,以便让Spring框架与其无缝结合。

技术创新点vue3和vue2的区别:

Vue2和Vue3的主要区别包括:性能提升、体积减小、响应式原理改变、支持碎片、Composition API的引入、更好的TypeScript支持、生命周期钩子的变化、指令与插槽的差异、以及一些其他的新特性 Vue3相比Vue2具有以下改进:可以没有根标签,减少内存使用;采用组合式API,使代码更有序;生命周期钩子函数有所变化;v-if和v-for的优先级不同;diff算法优化,减少不必要的节点比较;响应式原理通过Proxy实现,性能提升。Vue3还具有更快的渲染性能、更小的体积、更好的TypeScript支持和更灵活的组合式API。

创建前:beforeCreate -> 使用setup()
创建后:created -> 使用setup()
挂载前:beforeMount -> onBeforeMount
挂载后:mounted -> onMounted
更新前:beforeUpdate -> onBeforeUpdate
更新后:updated -> onUpdated
销毁前:beforeDestroy -> onBeforeUnmount
销毁后:destroyed -> onUnmounted
异常捕获:errorCaptured -> one rrorCaptured
被激活:onActivated 被包含在中的组件,会多出两个生命周期钩子函数。被激活时执行。
切换:onDeactivated 比如从 A 组件,切换到 B 组件,A 组件消失时执行
Vue 3 使用了 Proxy 来重写响应式系统,相比 Vue 2 的 Object.defineProperty,更加直观和强大。
在 Vue 3 中,可以在更深的层次上追踪响应式变量的变化,使得开发者能够更准确地监听数据变化。

核心代码部分展示

/**
 * 登录相关
 */
@RequestMapping("users")
@RestController
public class UsersController{
	
	@Autowired
	private UsersService userService;
		@Autowired
	private TokenService tokenService;
	/**
	 * 登录
	 */
	@IgnoreAuth
	@PostMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
		if(user==null || !user.getPassword().equals(password)) {
			return R.error("账号或密码不正确");
		}
		String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
		return R.ok().put("token", token);
	}
		/**
	 * 注册
	 */
	@IgnoreAuth
	@PostMapping(value = "/register")
	public R register(@RequestBody UsersEntity user){
    	if(userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
    		return R.error("用户已存在");
    	}
        userService.insert(user);
        return R.ok();
    }

	/**
	 * 退出
	 */
	@GetMapping(value = "logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
    	user.setPassword("123456");
        userService.update(user,null);
        return R.ok("密码已重置为:123456");
    }
	
	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,UsersEntity user){
        EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
    	PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/list")
    public R list( UsersEntity user){
       	EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
      	ew.allEq(MPUtil.allEQMapPre( user, "user")); 
        return R.ok().put("data", userService.selectListView(ew));
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        UsersEntity user = userService.selectById(id);
        return R.ok().put("data", user);
    }

非功能需求分析

在开发本系统时,需要满足基本的功能需求之外,还需要确定其非功能需求,保证性能和质量。如果没有非功能需求,也会严重影响系统的实施过程的要求。本系统从性能、安全、可操作性等方面考虑,来进行非功能性需求分析。
性能需求是开发系统的重要指标。包括响应速度,系统的并发用户访问量。在设计系统时,充分考虑到当前系统可能存在的最高并发数量,并由此选择对应的硬件服务器和对应的宽带容量,上传下载的速率等问题。对于系统的查询速度已经控制在两秒之内。同时考虑当遇到高并发时是否会影响查询时间。
安全性需求,对于所有的管理系统来说,数据安全都是非常重要的,要严格控制其数据的安全性,防止外泄和被不法分子盗取。所以,系统应该设置不同的操作权限,并加强数据库的加密管理和访问控制,并定期对数据进行维护,及时进行数据备份。
可操作性需求指的是系统设计时需要考虑针对不同的用户是否可以让对方明确的知道如何操作流程。对于后台管理来说也要考虑操作的便捷性和录入数据的简单性,不能因为管理系统给用户带来操作负担。另外,对于系统的录入也需要进行提示或者警告。比如某一项表单需要友好的进行提示用户是否需要录入,以及如何录入不同类型的数据,引导用户正确的去操作,尽最大可能的方便用户进行操作。

系统开发流程

MyBatis进行数据库持久化操作,完成数据处理,负责增删改查的基本操作。本系统通过DAO层完成持久层的设计,在持久层中定义实现的接口。接口方法只是定义业务处理,不具体实现,使得目录结构层次清晰,然后在Spring层中对接口实现。数据持久层对数据库操作是通过配置文件进行配置。DAO层进来数据结构和数据库数据的表对应。
Spring层是作为系统的业务层实现业务逻辑。在本系统中通过Service层来实现业务逻辑,Service通过接口方法和实现类进行设计,在接口中定义了各个操作类,具体的实现在Service层中定义的接口进行调用,Service实现通用的业务逻辑。
表现层是通过SpringMVC进行实现,在本系统中创建Controller层,负责业务模块的跳转。在Controller流程中,调用Service层的方法来实现对应的业务逻辑。同时通过配置文件来实现不同的控制器。
最后View层是实现页面的视图,通过创建Vue3页面和数据显示来完成操作,View层和控制层相互结合。视图层通过页面的跳转进入到Controller层,完成数据的处理并返回到视图层。
通过创建springboot框架,可以进行分模块开发,因为Dao层和Service层相互独立。不同的成员负责不同的模块,即可同步开发。而视图层和Controller层关系比较紧密,需要协作开发。

系统运行步骤

(1) 创建好数据库并导入,
(2) 创建后台Springboot三层架构(controller,service,mapper层)并启动测试
(3) 导入并编译前端代码vue:网站和后台管理
编译:npm install
试运行:npm run dev

软件测试

系统的主要内容包括页面测试、导航测试、技术环境、界面风格和可靠性测试。页面测试,在内容中查看是否符合规范、整体是否完整,功能菜单是否可以操作。导航栏目中提供系统功能的导航,快速的定位到功能页。界面风格,界面中的字体大小是否合适,颜色是否协调。可靠性测试,确保系统在多人并发运行访问系统后,在合理的时间范围内响应。系统的数据符合传输安全。依据软件和互联网数据的要求,采用保护措施,确保系统的可靠性。管理员的权限划分合理,分配用户对应的操作范围区分,区分不同类别用户的身份。然后做好数据备份,避免因软硬件软硬件故障造成的数据丢失。

源码获取

标签:Vue,return,SpringBoot,公交查询,系统,user,userService,java,public
From: https://blog.csdn.net/dongyun2022/article/details/142318998

相关文章

  • Vue3+SpringBoot高校毕业生实习及就业去向信息管理系统
    目录功能和开发技术介绍具体实现截图开发核心技术介绍:技术创新点vue3和vue2的区别:核心代码部分展示非功能需求分析系统开发流程系统运行步骤软件测试源码获取功能和开发技术介绍本课题拟采用主流的MVC架构、开发工具idea、java语言编程、MySQL数据库技术、Vue.js技......
  • java pom两个模块需要互相引用怎么办
    在Maven项目中,如果两个模块(通常称为子模块)需要互相引用,这通常意味着你的项目结构可能需要重新考虑或调整。Maven默认不支持直接的循环依赖,因为这会导致构建过程中的死锁。但是,有几种方法可以处理这种情况或避免它:1.重新设计项目结构首先,考虑是否有可能重新设计项目结构来避免循环......
  • 【F156】基于Springboot+vue实现的驾校预约学习系统
    主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。收藏点赞不迷路,关注作者有好处项目描述一切系统都要遵循系统设计的最基本全过程,系统也是如此。它还要通过市场调查、需求分析报告、汇总设计、详尽设计......
  • 【Java 优选算法】双指针(下)
    欢迎关注个人主页:逸狼创造不易,可以点点赞吗~如有错误,欢迎指出~有效三角形的个数题目链接解法解法1:暴力枚举--->O(n^3)解法2:利用单调性,使用双指针来解决---->O(n^2)优化:对整个数组进行排序先固定最大数在最大数的左区间内,使用双指针算法,快速统计出符合要......
  • PageHelper在SpringBoot中的使用和原理分析
    PageHelper在SpringBoot中的使用和原理分析在SpringBoot项目中使用Mybatis的PageHelper分页插件进行分页查询1、导入相关依赖<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></depe......
  • Java - 2 变量
    Java-2变量变量是程序的基本组成单位变量的三个基本要素:类型+名称+值声明变量=分配内存先声明,后使用变量在同一个作用域不可以重名数据类型基本数据类型:数值型/字符型(本质是整数)/布尔型引用数据类型:类(class)/接口(interface)/数组([])/*数值型-整数*/......
  • 基于SpringBoot+Vue+MySQL的网上租赁系统
    系统展示用户前台界面管理员后台界面系统背景  在当前共享经济蓬勃发展的背景下,网上租赁系统作为连接租赁双方的重要平台,正逐步改变着人们的消费观念和生活方式。通过构建一个基于SpringBoot、Vue.js与MySQL的网上租赁系统,我们旨在为用户提供便捷、高效、安......
  • 基于SpringBoot+Vue+MySQL的在线视频教育平台
    系统展示用户前台界面管理员后台界面系统背景  随着信息技术的飞速发展和互联网普及率的不断提高,传统教育模式正面临深刻变革。在线视频教育平台作为数字化教育的重要载体,以其灵活性强、资源丰富、覆盖广泛等优势,逐渐成为人们获取知识、提升技能的新途径。......
  • JavaScript:对组织值进行排序
    要对组织值进行排序,你可以使用JavaScript中的数组排序方法 sort()。下面是一些示例代码,展示如何对不同类型的组织值进行排序:示例1:对数字数组进行排序constnumbers=[5,2,9,1,5,6];//使用sort()方法进行升序排序numbers.sort((a,b)=>a-b);console.log(n......
  • Java轻量级测试框架的实现与使用 总篇
    Java轻量级测试框架的实现与使用总篇java8,jdk8,测试,assert背景每次写算法题,用例不过总要到本地调试一下,总觉得测试代码写起来又没营养又很麻烦,即便是借助junit测试框架也很麻烦,太重了,写完又觉得测试代码不美观需要删掉。正好在学习spring过程中接触到注解,研究其原理时......