一、前言
网络技术的快速发展给各行各业带来了很大的突破,也给各行各业提供了一种新的管理模式,校园二手交易平台小程序将是又一个从传统管理到智能化信息管理的典型案例,对于传统的校园二手交易,所包括的信息内容比较多,用户想要对这些数据进行管理维护需要花费很大的时间,而且数据的存储比较麻烦,想要查找某一相关的数据信息比较繁琐,随着互联网大潮的到来,决定开发一套智能化、信息化的校园二手交易平台小程序,主要对首页,个人中心,用户管理,卖家管理,商品分类管理,闲置物品管理,商品求购管理,系统管理等功能的研发。
本文研究以java为语言的校园二手交易平台小程序设计与实现,它在使用时数据库和程序不会被造成太大的影响,用起来也很得心应手。它也算是当时比较流行的安全性相对也很高的框架之一了,java开发语言。和mysql数据库,最终完成校园二手交易平台小程序。
二、开发环境
开发语言:Java
框架:springboot
JDK版本:JDK1.8
服务器:tomcat7
数据库:mysql 5.7(一定要5.7版本)
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
Maven包:Maven3.3.9
浏览器:谷歌浏览器
安卓框架:uniapp
安卓开发软件:HBuilder X
开发模式:混合开发
运行后台路径:localhost:8080/项目名称/admin/dist/index.html
管理员账号:abo
管理员密码:abo
2.1 MYSQL数据库
本课题所开发的应用程序在数据操作方面是不可预知的,是经常变动的,没有办法直接把数据写在文档里,这样不仅仅不安全,也不能实现应用程序的功能。如果要能实现应用程序所需要的数据存储功能,就避免不了要进行专业数据库存储软件的选择。基本上应用程序实现的功能不算太复杂,市面上任何一个关系型数据库软件都可以实现。参考自己的学习进度和操作习惯来讲,Oracle数据库是适合的,但是所需要的的安装软件很大,并且有好多不需要的功能都是开启的状态,十分消耗电脑资源,所以没有选择Oracle数据库,而SQL Server数据库虽然学过,但是安装的时候因为电脑上可能有其他的软件存在,经常性的出问题,而安装问题不好解决就需要重新安装操作系统,这样对已经存在的软件来讲又是一种时间上的浪费。只有MySQL数据库,安装包小,安装速度快,操作简单,哪怕安装出问题也好解决,不用重装操作系统,也不影响电脑上运行的其他软件,消耗资源也少,最重要的是在功能方面完全的符合设计需要,所以最后选择了MySQL数据库作为应用软件开发需要的数据库。
2.2 Java语言
Java语言发展有25年多了,在互联网行业经过这么多年的发展,还依然在市场的占有率上有半壁江山,依然受到很多程序员的喜爱,好多从业人员进行学习,随着互联网从业人员的增加,并没有降低Java语言的江湖地位,算是一个常青藤。Java语言学习很简单,当然这是针对于前辈C++来讲的,C++语言相当的强悍。Java取消了很多C++特征,比如go to这些语句,还有取消了主文件,让所有的文件都是类,类里都是数组和各种对象,还让Java自己处理各种对象的引用和回收,让开发人员只需要创建对象,使用对象,编辑代码逻辑,不需要关注性能方面,让数据的各种存储交给Java自己处理,可以花更多的时间研究应用程序之间的关系,让开发变得更专注,就像赛车的驾驶员一样,只需要了解各种车辆的性能,并且进行操作,不需要研究轱辘如何制造,这样让程序开发更加的细化。
2.3 微信小程序技术
小程序并非凭空冒出来的一个概念。当微信中的 微信小程序View 逐渐成为移动 微信小程序 的一个重要入口时,微信就有相关的 JS API 了。
实际上,微信官方是没有对外暴露过如此调用的,此类 API 最初是提供给腾讯内部一些业务使用,很多外部开发者发现了之后,依葫芦画瓢地使用了,逐渐成为微信中网页的事实标准。2015年初,微信发布了一整套网页开发工具包,称之为 JS-SDK,开放了拍摄、录音、语音识别、二维码、地图、支付、分享、卡券等几十个API。给所有的 微信小程序 开发者打开了一扇全新的窗户,让所有开发者都可以使用到微信的原生能力,去完成一些之前做不到或者难以做到的事情。
JS-SDK是对之前的 WeixinJSBrige 的一个包装,以及新能力的释放,并且由对内开放转为了对所有开发者开放,在很短的时间内获得了极大的关注。从数据监控来看,绝大部分在微信内传播的移动网页都使用到了相关的接口。
JS-SDK 解决了移动网页能力不足的问题,通过暴露微信的接口使得 微信小程序 开发者能够拥有更多的能力,然而在更多的能力之外,JS-SDK 的模式并没有解决使用移动网页遇到的体验不良的问题。用户在访问网页的时候,在浏览器开始显示之前都会有一个的白屏过程,在移动端,受限于设备性能和网络速度,白屏会更加明显。我们团队把很多技术精力放置在如何帮助平台上的微信小程序开发者解决这个问题。因此我们设计了一个 JS-SDK 的增强版本,其中有一个重要的功能,称之为“微信 微信小程序 资源离线存储”
这个设计有点类似 HTML5 的 Application Cache,但在设计上规避了一些 Application Cache的不足。
在内部测试中,我们发现 离线存储 能够解决一些问题,但对于一些复杂的页面依然会有白屏问题,例如页面加载了大量的 CSS 或者是 JavaScript 文件。除了白屏,影响 微信小程序 体验的问题还有缺少操作的反馈,主要表现在两个方面:页面切换的生硬和点击的迟滞感。
微信面临的问题是如何设计一个比较好的系统,使得所有开发者在微信中都能获得比较好的体验。这个问题是之前的 JS-SDK 所处理不了的,需要一个全新的系统来完成,它需要使得所有的开发者都能做到:
快速的加载
更强大的能力
原生的体验
易用且安全的微信数据开放
高效和简单的开发
2.4 SpringBoot框架
在过去两三年的Spring生态圈,最让人兴奋的莫过于Spring Boot框架。或许从命名上就能看出这个框架的设计初衷:快速的启动Spring应用。因而Spring Boot应用本质上就是一个基于Spring框架的应用,它是Spring对“约定优先于配置”理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于Spring生态圈的应用。
那Spring Boot有何魔法?自动配置、起步依赖、Actuator、命令行界面(CLI) 是Spring Boot最重要的4大核心特性,其中CLI是Spring Boot的可选特性,虽然它功能强大,但也引入了一套不太常规的开发模型,因而这个系列的文章仅关注其它3种特性。如文章标题,本文是这个系列的第一部分,将为你打开Spring Boot的大门,重点为你剖析其启动流程以及自动配置实现原理。要掌握这部分核心内容,理解一些Spring框架的基础知识,将会让你事半功倍。
可以把Spring IoC容器比作一间餐馆,当你来到餐馆,通常会直接招呼服务员:点菜!至于菜的原料是什么?如何用原料把菜做出来?可能你根本就不关心。IoC容器也是一样,你只需要告诉它需要某个bean,它就把对应的实例(instance)扔给你,至于这个bean是否依赖其他组件,怎样完成它的初始化,根本就不需要你关心。
作为餐馆,想要做出菜肴,得知道菜的原料和菜谱,同样地,IoC容器想要管理各个业务对象以及它们之间的依赖关系,需要通过某种途径来记录和管理这些信息。 BeanDefinition对象就承担了这个责任:容器中的每一个bean都会有一个对应的BeanDefinition实例,该实例负责保存bean对象的所有必要信息,包括bean对象的class类型、是否是抽象类、构造方法和参数、其它属性等等。当客户端向容器请求相应对象时,容器就会通过这些信息为客户端返回一个完整可用的bean实例。
2.5 B/S架构
B/S架构是软件行业针对C/S架构来进行区分的,用来描述浏览器与服务器之间的一种架构模式。一般选择B/S架构最主要的原因就是方便维护,当程序开发的时候,可以在本地进行测试,一般的集成开发环境都自带的有开发和一键部署,本地浏览器可以及时的看到效果,测试人员有专门的服务器,只需要部署上去即可,如果中间有问题都可以进行整改的。应用程序升级,只需要后台维护代码即可,客户方面还是用之前的浏览器进行访问,所以客户端方面是很方便的。现在市面上基本上所有的操作系统平台只要是有视窗模式的,除了命令行操作界面的窗口之外,在视窗模式都是可以安装浏览器的,所以任何带视窗模式的电脑操作系统自带的浏览器或者是其他厂家的浏览器,或者是移动端的浏览器,都可以进行访问服务器的。访问服务器占用客户端资源是很少,而且不容易出错,哪怕客户端这边出现大的问题,只需要重装系统然后再安装上浏览器即可。在程序功能和客户体验上面,选择B/S架构进行应用程序开发,是很适合当今社会的主流发展趋势的。
2.6 Tomcat 介绍
刚开始学习Java语言的时候,是不知道还有Tomcat这些东西的,各种语法各种输出在控制台进行输出结果,当Java网站开发的时候就不可避免的学习到了Tomcat服务器。Tomcat准确的来讲不算是服务器,可以说是微信小程序引擎或者一个容器,这些都是学术上或者原理上都比较贴切的,但是实际工作中Tomcat就是作为一个微信小程序服务器来用的,因为可以实现网站的发布和运行。因为工作原理的原因,Tomcat一般作为中小型企业和并发量并不突出的一种轻量级的服务器存在的,比如某些行业的应用系统,本身客户端就不多,需要的连接也不多,一般都用Tomcat的。Tomcat里面可以配置多个网站,配置文件后缀是config的文档,类似于XML的结构,比较清晰明了。每当Java发布新的版本的时候,Tomcat也会为了匹配Java的版本进行升级,目前Tomcat版本已经到版本10了。Tomcat标识是一只有点发黄的小猫咪,当Tomcat配置成功一般测试的时候能看到这个小猫咪就算是成功的,才能进行下一步的配置。Tomcat服务器在Java网站开发中还是挺合适的。
2.7 HTML简介
HTML是超文本标记语言,都是用各种声明以及对称性的的特殊符号作为标记,用以浏览器解析。HTML还有一些基本标签,比如根元素标签就是,而文档元数据一般都写在了标签里面,标题就是浏览器左上角的显示的网页内容,用的是
三、系统功能设计
本课题要求实现一套校园二手交易平台小程序,系统主要包括管理员,卖家和用户三大模块
(a) 管理员;管理员进入系统主要功能包括首页,个人中心,用户管理,卖家管理,商品分类管理,闲置物品管理,商品求购管理,系统管理等功能并进行操作。
(b) 卖家;卖家进入系统主要功能包括首页,个人中心,闲置物品管理,用户咨询管理,订单管理等功能并进行操作。
© 用户;用户进入小程序主要功能包括首页,闲置商品,商品求购,购物车,我的等功能并进行操作。
小程序总体功能如下图所示:
四、系统功能效果
五、核心代码
validationQuery=SELECT 1
jdbc_url=jdbc:mysql://127.0.0.1:3306/ssm0m7v0?useUnicode=true&characterEncoding=UTF-8&tinyInt1isBit=false
jdbc_username=root
jdbc_password=root
#jdbc_url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ssm0m7v0
#jdbc_username=sa
#jdbc_password=123456
{
"navigationBarBackgroundColor": "#82A39D",
"navigationBarTextStyle": "white",
"navigationBarTitleText": "登录",
"usingComponents": {}
}
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["pages/login/login"],{"0761":function(t,e,n){},"1d97":function(t,e,n){"use strict";n.r(e);var r=n("6a46"),o=n.n(r);for(var a in r)"default"!==a&&function(t){n.d(e,t,(function(){return r[t]}))}(a);e["default"]=o.a},"30ef":function(t,e,n){"use strict";var r=n("0761"),o=n.n(r);o.a},4431:function(t,e,n){"use strict";var r;n.d(e,"b",(function(){return o})),n.d(e,"c",(function(){return a})),n.d(e,"a",(function(){return r}));var o=function(){var t=this,e=t.$createElement;t._self._c},a=[]},"65dc":function(t,e,n){"use strict";n.r(e);var r=n("4431"),o=n("1d97");for(var a in o)"default"!==a&&function(t){n.d(e,t,(function(){return o[t]}))}(a);n("30ef"),n("7ef3");var i,u=n("f0c5"),s=Object(u["a"])(o["default"],r["b"],r["c"],!1,null,"a3f9083c",null,!1,r["a"],i);e["default"]=s.exports},"6a46":function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var r=a(n("a34a")),o=a(n("5596"));function a(t){return t&&t.__esModule?t:{default:t}}function i(t,e,n,r,o,a,i){try{var u=t[a](i),s=u.value}catch(c){return void n(c)}u.done?e(s):Promise.resolve(s).then(r,o)}function u(t){return function(){var e=this,n=arguments;return new Promise((function(r,o){var a=t.apply(e,n);function u(t){i(a,r,o,u,s,"next",t)}function s(t){i(a,r,o,u,s,"throw",t)}u(void 0)}))}}var s={data:function(){return{username:"",password:"",codes:[{num:1,color:"#000",rotate:"10deg",size:"16px"},{num:2,color:"#000",rotate:"10deg",size:"16px"},{num:3,color:"#000",rotate:"10deg",size:"16px"},{num:4,color:"#000",rotate:"10deg",size:"16px"}],options:["请选择登录用户类型"],optionsValues:["","yonghu"],index:0,roleNum:0}},onLoad:function(){var t=["请选择登录用户类型"],e=o.default.list();this.menuList=e;for(var n=0;n<this.menuList.length;n++)"是"==this.menuList[n].hasFrontLogin&&(t.push(this.menuList[n].roleName),this.roleNum++);1==this.roleNum&&(this.index=1),this.options=t,this.styleChange()},methods:{styleChange:function(){this.$nextTick((function(){}))},onRegisterTap:function(e){t.setStorageSync("loginTable",e),this.$utils.jump("../register/register")},onForgetTap:function(){this.$utils.jump("../forget/forget")},onLoginTap:function(){var e=this;return u(r.default.mark((function n(){var o;return r.default.wrap((function(n){while(1)switch(n.prev=n.next){case 0:if(e.username){n.next=3;break}return e.$utils.msg("请输入用户名"),n.abrupt("return");case 3:if(e.password){n.next=6;break}return e.$utils.msg("请输入用户密码"),n.abrupt("return");case 6:if(e.optionsValues[e.index]){n.next=9;break}return e.$utils.msg("请选择登陆用户类型"),n.abrupt("return");case 9:return n.next=11,e.$api.login("".concat(e.optionsValues[e.index]),{username:e.username,password:e.password});case 11:return o=n.sent,t.removeStorageSync("useridTag"),t.setStorageSync("token",o.token),t.setStorageSync("nickname",e.username),t.setStorageSync("nowTable","".concat(e.optionsValues[e.index])),n.next=18,e.$api.session("".concat(e.optionsValues[e.index]));case 18:o=n.sent,t.setStorageSync("userid",o.data.id),o.data.vip&&t.setStorageSync("vip",o.data.vip),t.setStorageSync("role","".concat(e.options[e.index])),e.$utils.tab("../index/index");case 23:case"end":return n.stop()}}),n)})))()},optionsChange:function(t){this.index=t.target.value}}};e.default=s}).call(this,n("543d")["default"])},7554:function(t,e,n){"use strict";(function(t){n("4afe");r(n("66fd"));var e=r(n("65dc"));function r(t){return t&&t.__esModule?t:{default:t}}t(e.default)}).call(this,n("543d")["createPage"])},"7ef3":function(t,e,n){"use strict";var r=n("d429"),o=n.n(r);o.a},d429:function(t,e,n){}},[["7554","common/runtime","common/vendor"]]]);