系统架构:
七张表:
八个实体:
系统首页:
课程信息:
新增跟编辑的模态框:
模糊查询:
学生身份选课:
老师身份查看:
管理员身份查看:
国内最流行的后端技术栈是java的ssm(Spring, SpringMVC, Mybatis)。最新的是Springboot以及SpringCloud
Spring是Spring系列的基石,主要有两个理念:IOC和AOP,IOC是控制反转的意思,代表着把对象创建的权利从程序员转移到框架上去,在Java里面传统思想是程序员自己手动new一个对象出来。这里列举两个需要用到IOC的场景:
AOP是一种无侵入的思想,比如现在有一个电商系统,用户下单的时候需要将商品的各种信息保存到数据库。但是现在有一个需求,在下单的同时需要将下单的创建时间和创建人也一并保存到数据库,推广一下,不只是下单,包括用户创建地址的时候也需要将创建时间以及创建人保存到数据库。对于这一类非核心的但是需要的公共字段就可以用AOP来处理,我们只需要抽离公共字段(创建人,创建时间,修改人,修改时间)通过AOP就能实现无需改动原核心代码就能实现以上需求
SpringMVC是基于Spring两大理念上做的一个web框架,六七年前用的很多,现在由于Springboot已经用的很少了
Springboot是因为Spring跟SpringMVC配置特别麻烦而提出来的一个轻量级框架。在Springboot讲究约定大于配置,通过“约定”就能避免配置大量繁琐的文件,除非真的要做特别定制需求才会去配置,这种开箱即用的特性简化了开发流程
SpringCloud是基于Springboot的,因为Springboot是单体项目,所有功能聚合在一起。在用户流量特别大的时候,其实需要将各个模块拆分到不同服务器上分散压力,就算宕机也能对外提供服务。比如SpringCloud就会将电商系统的订单模块,购物车模块,商品模块拆分到不同服务器上面
Mybatis是一个数据库对象映射框架,Mybatis将数据库里面的一张表映射成了Java里面一个对象,表里面的字段就是对象里面的字段,比如有一张user表(两字段user_id, user_name),那么对应User类(两字段userId, userName)。Mybatis就相当于Java代码跟数据库的缓冲区
后端开发思想是MVC,这种思想存在于各种后端语言中。M代表数据,V代表视图,C代表控制器。当用户在前端地址栏请求一个url资源,那么首先会访问到控制器,控制器会对这次请求进行分析,比如是什么类型的请求GET?POST?,有没有带路径参数等等。处理好之后会交给M修改数据,最后通过V返回前端。比如一个请求是:POST /goods/update/?id=12,其中的Body参数为{price:999, inventory:20},商家在管理端希望将编号为12的商品修改价格为999,库存为20件。控制器接收到该路径后交给mapper(java中调用mybatis)修改好数据,再通过V将更新后的数据返回给前端,让用户看到最新的状态
前端是MVVM思想:
在国内最流行的典型前端框架就是Vue,并衍生出Uniapp(一套代码多端编译),Vue-Router(路由),Pinia(状态管理),UseVue等等产品。Vue的核心理念就是响应式数据(承担了ViewModel的职责),这意味着数据会自动响应变化而无需程序员手动修改。比如:
vue react angluar
ajax
REST
maven
requiresment.txt
JavaBean
vue bootstrap axois
orm
//java中使用一个user.name
class User{
private String name;
//getter setter 构造器
}
User user = new User("admin")
//js中使用user.name
user = {}
user.name = "admin"
软编码:比如开发一个贪吃蛇游戏,定义屏幕的宽度和高度
int WIDTH,HEIGHT = 800 800 *
那么在之后需要用到边界的时候,只需要引用变量就可以了,比如
if (snake.x>=WIDTH) { return -1;}
else { return 0}
如果需要更改游戏界面大小,只需要在最开始的*地方修改一处就行了
学院->部门->专业
管理员编辑课程,学生选课,教师通过
只有登录页需要校验身份,用不着每一次请求后端服务之前都去数据库鉴别一次身份是否正确(无意义且浪费资源)。因此在登录鉴别成功之后,把相关信息保存到本次会话。同理前端把校验正确的信息存放到localStorage,避免不必要开销
在类上打@RestController @Service @Mapper,就意味着把这些类实例化一个唯一的对象,并且加入到spring容器里(把汤圆下锅)
在需要使用的地方加入@Autowired,就代表从容器里取出该类型的对象使用(把汤圆装进碗里)
生命周期函数(也叫作钩子函数),这是在某个特定周期会触发的函数,有点类似于Python类里面的__init__ __del__ 。在浏览器页面就有加载时,销毁时等等时机
以json传送的数据要加@Requestbody
通过v-if结合level控制权限
所有标签里面的class属性都只是控制样式,不涉及代码逻辑
SELECT * FROM student_info limit 4,3 是从第四行开始(包括这一行),返回三行数据。mysql索引从零开始。使用PageHelper有两个好处:
回显
{
"pageNum":1,
"pageSize":5
}模糊查询
http://localhost:8888/collegeInfo/page/search?pageNum=1&pageSize=5
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。