最后
小编精心为大家准备了一手资料
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
BATJ面试要点及Java架构师进阶资料
2.3 Springboot
Java一直被人诟病的一点就是臃肿、麻烦。当我们还在辛苦的搭建项目时,可能Python程序员已经把功能写好了,究其原因注意是两点:复杂的配置,项目各种配置其实是开发时的损耗, 因为在思考 Spring 特性配置和解决业务问题之间需要进行思维切换,所以写配置挤占了写应用程序逻辑的时间。一个是混乱的依赖管理。项目的依赖管理也是件吃力不讨好的事情。决定项目里要用哪些库就已经够让人头痛的了,你还要知道这些库的哪个版本和其他库不会有冲突,这难题实在太棘手。并且,依赖管理也是一种损耗,添加依赖不是写应用程序代码。一旦选错了依赖的版本,随之而来的不兼容问题毫无疑问会是生产力杀手。而SpringBoot让这一切成为过去!Spring Boot 简化了基于Spring的应用开发,只需要“run”就能创建一个独立的、生产级别的Spring应用。Spring Boot为Spring平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器),这样我们就可以简单的开始。多数Spring Boot应用只需要很少的Spring配置。我们可以使用SpringBoot创建java应用,并使用Java–jar 启动它,就能得到一个生产级别的web工程
三、系统设计:
3.1 系统功能设计:
网上商品订单转手系统主要功能设计:
主要角色:用户 商家 管理员
主要功能设计:用户登录、注册、修改密码、首页信息展示、系统轮播图 、模糊搜索、收藏、商品点击数量统计、评论、收藏、富文本图文上传、文件上传、商家管理、用户余额充值等
商品管理(订单、商品评论、回复、商品统计报表、接单、转单、发货、收货、退货等)
公告信息、加上一些基本业务功能的添加修改删除操作等
3.2 登录流程设计:
3.3 登录时序图设计:
四、功能截图:
4.1 登录注册
4.2 系统前台
4.2.1 系统首页:
4.2.2 商品信息:
4.2.3 商品详情:
4.2.4 论坛信息:
如图显示的就是论坛信息管理页面有:根据论坛信息进行条件查询,还可以对论坛信息进行新增、修改、查询操作等等
4.2.5 公告信息:
4.2.6 订单信息:
4.2.7 个人中心:
4.3 系统后台
4.3.1用户管理:
如图显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,还进行了对用户名称的模糊查询的条件
4.3.2 商家管理:
4.3.3 商品管理:
如图显示的就是商品信息管理页面,此页面提供给管理员的功能有:查看已发布的商品信息数据,修改商品信息,商品信息作废,即可删除,还进行了对商品信息名称的模糊查询 商品信息信息的类型查询等等一些条件
4.3.4 数据类型:
4.3.5 订单信息:
4.3.6 公告信息:
4.4 商家模块
4.4.1 接单:
4.4.2 发货或转单
五、部分数据设计:
在数据库设计过程中,概念设计阶段是逻辑设计阶段得以实现的基础,也是根据用户参与情况确定对数据的处理要求,从而使得数据库设计成功的关键。概念设计的主要任务是将现实世界的所收集到的使用需求转化为抽象的信息世界结构的过程,能够真实的反映现实生活中实体与实体之间的联系,数据库的相关语法和代码比较容易理解和修改,方便相关人员将相关的数据信息存储到数据库中,并对其进行修改和使用[18]。
通过将现实世界中的实体、属性、联系等内容进行概念设计,建立比较抽象的概念数据模型,即E-R图。通过E-R图可将现实世界抽象到的概念设计转变成数据库的实体设计,并且能够明显的看见各个实体之间,数据的流动情况,具体较强的表达能力,更加方便于开发人员寻找与发现用户具体的需求[19]。因此,E-R的建立,在整个数据库的设计过程中,起着至关重要的作用。本系统主要的实体有管理员、用户、留言等。在E-R图中,矩形表示实体集,椭圆形表示属性,菱形表示联系。其中,联系的类型包括1:1(一对一)、1:n(一对多)、n:m(多对多)关系。
下图是商品实体和其具备的属性:
下图是用户实体和其具备的属性:
下图是资料实体和其具备的属性
六、代码参考
/**
* 上传文件映射表
*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
@Autowired
private ConfigService configService;
/**
* 上传文件
*/
@RequestMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
if (file.isEmpty()) {
throw new EIException("上传文件不能为空");
}
String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
String fileName = new Date().getTime()+"."+fileExt;
File dest = new File(upload.getAbsolutePath()+"/"+fileName);
file.transferTo(dest);
if(StringUtils.isNotBlank(type) && type.equals("1")) {
ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
if(configEntity==null) {
configEntity = new ConfigEntity();
configEntity.setName("faceFile");
configEntity.setValue(fileName);
} else {
configEntity.setValue(fileName);
}
configService.insertOrUpdate(configEntity);
}
return R.ok().put("file", fileName);
}
/**
* 下载文件
*/
@IgnoreAuth
@RequestMapping("/download")
public ResponseEntity<byte[]> download(@RequestParam String fileName) {
try {
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
File file = new File(upload.getAbsolutePath()+"/"+fileName);
if(file.exists()){
/*if(!fileService.canRead(file, SessionManager.getSessionUser())){
getResponse().sendError(403);
}*/
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
}
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
七、项目总结:
之前在课本上学习过软件开发的知识,包括开发流程的了解,开发技术的学习,还有如何进行系统需求分析与设计,老师也选取了比较有代表性的管理系统在课堂上进行讲解,并在课后布置作业让我们练习,期间老师也让我们也对系统实现与测试进行了了解。所以面对本次网上商品订单转手系统的开发制作,我的脑海里还是有比较清晰的思路。在系统制作中,以及配套文档的编写中,我都是按照软件开发流程一步步开展我的工作。
从系统的角度讲,网上商品订单转手系统制作中,它的难点在于功能的确定,对系统结构的设计,还有设计性能优良的数据库,以及采用成熟的技术实现系统功能等,这些是我面临的困难。针对这些难点,我采取了一定的措施。在不知道系统的功能时,我在网上寻找了很多相似系统,并把这些系统的大致功能进行了记载,把对本系统有用的功能部分进行了采用,另外,我也从网上获取了大量关于系统设计方面的知识,包括系统模块划分,设计原则,数据库表的设计与创建等知识,也从软件开发类博客中,获取了程序编码的技术知识,包括数据增删改代码模块的编写与使用。在本系统编码完成其对应功能后,我对系统的所有功能进行了耐心的测试,最后发现我开发的系统是合格的,可以进行验收。因为本系统除了具备简洁美观的界面外,在功能上可以满足使用者对于数据操作的需求,并且本系统的功能与系统分析设计的功能保持高度一致,而且系统运行稳定,面对用户的误操作,也建立了报错反馈机制,系统的质量可靠。唯一不足的就是系统数据表的设计在字段考虑上并不全面,为字段匹配的数据类型也不精确,还有系统代码部分,有很多地方还没有进行注释,代码编写不够简洁等。
结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
[外链图片转存中…(img-wfaAobhm-1715516856647)]
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!