社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套酒吧存酒系统有管理员和用户两个角色。管理员可以管理个人中心,用户管理,酒吧信息管理,酒水信息管理,酒水购买管理,存酒信息管理,取酒信息管理,酒水类型管理,留言板管理等。用户可以注册登录,查看酒吧信息、酒水信息、通知公告,购买酒水,留言反馈,可以自主存酒取酒,等待管理员审核等操作。酒吧存酒系统服务端用Java开发,用SSM框架开发的网站后台,数据库用到了MySQL数据库作为数据的存储。这样就让用户用着方便快捷,都通过同一个后台进行业务处理,而后台又可以根据并发量做好部署,用硬件和软件进行协作,满足于数据的交互式处理,让用户的数据存储更安全,得到数据更方便。
2.1 SSM框架介绍
SSM框架是有Spring+SpringMVC+MyBatis组成。
Spring
Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由Rod Johnson在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
MyBatis
MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
2.2 B/S架构介绍
在早期的程序开发中,使用得最多的莫过于C/S架构了,现在的生活中软件在生活的各个方面落地,使用了C/S架构开发出来的软件也是不在少数的,比如企业日常办公使用到的微软的OFFICE软件,我国自己研发的文档处理软件WPS,还有娱乐软件腾讯的QQ,腾讯的微信,以及电脑上安装的杀毒软件金山杀毒软件,瑞金杀毒软件等都是C/S架构。但是在Internet网络盛行之后,鉴于大家对数据信息共享的需求,在原来的C/S架构上进行了升级改进之后,有了现在的主流架构B/S架构,B/S架构就是在C/S架构上多了一个浏览器,让原来的直接访问服务器的方式,变成了通过浏览器去访问服务器。充分运用到了当下不断成熟的浏览器技术。也让软件的开发成本以及维护成本降低了。可以说B/S这种新型的架构模式让软件的开发变得便利化。
2.3 MySQL数据库介绍
有了程序功能的操作,也需要对程序操作的各个功能所产生的数据信息存放在一个固定的仓库里面,这个所谓的仓库就是大家最熟悉的程序开发需要使用的数据库了,数据库能够发展到至今的模样,其实也是经历了很多的变化历程的,在最开始由于数据信息处理的需要开始推出最低级的数据管理,这个阶段也是数据库早期的人工管理的阶段,后来也经历了文件管理的阶段,这个阶段的数据管理因为信息不能够进行共享,加上管理的数据对配套的程序产生了较强的依赖性,在数据信息管理上也存在很多数据的重复记载造成数据冗余等问题。所以为了解决上述一系列文件管理阶段所产生的数据管理的问题,对数据管理方式进行了全方位的升级改造,也就让数据管理进入了一个全新的阶段——数据库系统的阶段。这个阶段也是数据库管理数据的一个全新的相当高级的阶段。
说到数据库,也不得不说数据库的模型,数据库拥有的数据模型有网状,还有层次,以及关系型这三样数据库模型。网状的结构就是把记录的每条信息都比喻成一个点,点跟点之间也有联系,最终就形成了一个像网一样的结构,就是所谓的网状数据模型。也有对数据记录使用树状结构的方式进行数据保存,这个就是层次数据模型,关系数据库模型运用在现在市面上常见的数据库当中了,像本系统开发使用的MySQL数据库,还有安装过程比较复杂的Sqlserver数据库,也有一些比较小巧的关系型数据库,像Access数据库,FoxPro数据库等数据库。这样的关系型数据库将数据表里面的行还有列进行相互关联形成一个二维矩阵的方式来保存程序所产生的数据信息。
本次之所以选择MySQL数据库来当程序数据存放的仓库,则是因为此数据库安装不用费时,也不需要各种百度信息去解决安装过程中出现的任何问题,而且由于自己的电脑内存比较小,才4个G,为了更好的开发项目程序,针对低配置的电脑选择MySQL数据库也是情理之中。
2.4 JAVA语言介绍
在1995年这一年的5月份,著名的Sun Microsystems公司在程序开发设计上面郑重推出一种面向对象开发的程序设计语言——Java,最开始的时候Java是由詹姆斯.高斯林这位伟大的JAVA之父来进行主导,但是在后来由于各种原因,让甲骨文公司这个针对商业程序创建了oracle大型数据库的公司收购了Java。Java的平台总共算下来有3个,分别为javaME和javaSE以及javaEE这3个java平台。下面将对其进行分别介绍。
1.在电脑桌面程序的开发上面需要选择JavaME,这个用得也比较多。
2.企业也会根据工作以及业务需要开发各种软件,那么就会选用JavcEE这个支持企业版软件的开发的Java平台,JavcEE主攻运用在企业领域上面的web应用,JavcEE也在javaSE的基础上获得了比如jsp技术 ,Servlet技术等程序开发技术的支持。
3.现在生活中手机的普及化,也使得手机端这样的移动设备的软件的兴起,JavaME这个迷你版java平台就能运用于移动端的软件开发操作。
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.CunjiuxinxiEntity;
import com.entity.view.CunjiuxinxiView;
import com.service.CunjiuxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/**
* 存酒信息
* 后端接口
* @author
* @email
* @date 2021-05-28 10:30:01
*/
@RestController
@RequestMapping("/cunjiuxinxi")
public class CunjiuxinxiController {
@Autowired
private CunjiuxinxiService cunjiuxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,CunjiuxinxiEntity cunjiuxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
cunjiuxinxi.setZhanghao((String)request.getSession().getAttribute("username"));
}
EntityWrapper<CunjiuxinxiEntity> ew = new EntityWrapper<CunjiuxinxiEntity>();
PageUtils page = cunjiuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cunjiuxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,CunjiuxinxiEntity cunjiuxinxi,
HttpServletRequest request){
EntityWrapper<CunjiuxinxiEntity> ew = new EntityWrapper<CunjiuxinxiEntity>();
PageUtils page = cunjiuxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, cunjiuxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( CunjiuxinxiEntity cunjiuxinxi){
EntityWrapper<CunjiuxinxiEntity> ew = new EntityWrapper<CunjiuxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( cunjiuxinxi, "cunjiuxinxi"));
return R.ok().put("data", cunjiuxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(CunjiuxinxiEntity cunjiuxinxi){
EntityWrapper< CunjiuxinxiEntity> ew = new EntityWrapper< CunjiuxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( cunjiuxinxi, "cunjiuxinxi"));
CunjiuxinxiView cunjiuxinxiView = cunjiuxinxiService.selectView(ew);
return R.ok("查询存酒信息成功").put("data", cunjiuxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
CunjiuxinxiEntity cunjiuxinxi = cunjiuxinxiService.selectById(id);
return R.ok().put("data", cunjiuxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
CunjiuxinxiEntity cunjiuxinxi = cunjiuxinxiService.selectById(id);
return R.ok().put("data", cunjiuxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody CunjiuxinxiEntity cunjiuxinxi, HttpServletRequest request){
cunjiuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(cunjiuxinxi);
cunjiuxinxiService.insert(cunjiuxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody CunjiuxinxiEntity cunjiuxinxi, HttpServletRequest request){
cunjiuxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(cunjiuxinxi);
cunjiuxinxiService.insert(cunjiuxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody CunjiuxinxiEntity cunjiuxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(cunjiuxinxi);
cunjiuxinxiService.updateById(cunjiuxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
cunjiuxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<CunjiuxinxiEntity> wrapper = new EntityWrapper<CunjiuxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
wrapper.eq("zhanghao", (String)request.getSession().getAttribute("username"));
}
int count = cunjiuxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}