项目总结:

这是我的第一个SSM项目 也是我第一次系统的接触一个完整的框架,本项目分为前台和后台系统,分别是用户界面和管理员界面。主要技术为:Spring,Springmvc,mybatis,并且在前台的数据缓存中用到了基于No-sql技术的Redis。

我对这些技术的理解:
Spring:Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建,是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。

Spring 的主要核心点

  1. 控制反转:Spring通过一种称作控制反转(IOC)的技术促进了低耦合。当应用了IOC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IOC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
  2. 面向切面:Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。简单的来说就是各个模块不会互相干扰,这就像我们的并联电路一样,一个模块停止工作不会影响到其他模块。这也满足了我们的编程思想:高内聚,低耦合。
  3. 容器:Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
  4. MVC:Spring的作用是整合,但不仅仅限于整合,Spring 框架可以被看做是一个企业解决方案级别的框架。客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。HandlerMapping 将请求映射到对应的处理器Controller(相当于Action)在Spring 当中如果写一些处理器组件,一般实现Controller 接口,在Controller 中就可以调用一些Service 或DAO 来进行数据操作 ModelAndView 用于存放从DAO 中取出的数据,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在Spring 框架中还提供一个视图组件ViewResolver,该组件根据Controller 返回的标示,找到对应的视图,将响应response 返回给用户。

Spring的优势
1.低侵入式设计,代码污染极低
2.独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
3.Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
4.Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
5.Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部

Mybatis
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

在使用Mybatis时,我使用了代码自动生成器 Generator,它可以根据数据库对象来自动生成实体类Model和映射Mapper。它提供了标准的增删改查功能,极大的增加了我的工作效率。

Mybatis的优势

  1. MyBatis 最强大的特性之一就是它的动态语句功能,把SQL语句条件连接在一起是一件非常痛苦的事,而Mybatis的动态SQL语句解决了这个问题
  2. Generator文件:可以自动生成我的Model和Mapper类。

Spring和Mybatis的集成

这是本次项目的一个重要核心点,单独使用Mybatis 是有很多限制的(比如无法实现跨越多个session的事务),而且很多业务系统本来就是使用spring来管理的事务,因此Mybatis 最好与spring集成起来使用。

 <!--让spring生成mapper接口的代理实现类--><bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer"><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/><!--对哪些包下的类生成mapper代理类--><property name="basePackage" value="com.imcode.mall.mapper"/></bean><!--配置事务管理器--><bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 事务增强/通知 --><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="*"/><tx:method name="get*" read-only="true"/><tx:method name="find*" read-only="true"/></tx:attributes></tx:advice><!-- 切面配置 --><aop:config><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.imcode.common.service.*Service.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.imcode.mall.service.*Service.*(..))"/></aop:config>

Redis:

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。

Redis 主要用在前台数据的操作,他使得用户在对我们的网站进行浏览时不需要频繁的访问数据库,从而大大的提高了数据传输的效率

以下是我的项目的前后台页面:
前台首页

商品详情页

购物车

最近浏览

最近浏览我用到了Redis技术,在用户访问商品详情时,记录下当前的商品ID:

    @GetMapping("/detail/{id}")public String detail (@PathVariable Integer id, Model model){Goods goods = goodsService.getById(id);//根据商品ID查找商品详情Member member=(Member)session.getAttribute("sessionUser");//获取当前登录的用户redisTemplate.opsForHash().put(prefix+goods.getId()+memberId,"record",goods);//把用户浏览的商品加到Redis中redisTemplate.expire(prefix+goods.getId()+memberId,5,TimeUnit.MINUTES);//设置Redis的有效生命周期为5分钟model.addAttribute("goods",goods);return "goods/goods_detail";}

商品支付页面

在提交订单时,应该把当前购物车中的商品删除:
编辑收货地址

在收货地址这个模块,我在AddressMapper 写了三个方法:

//查询默认地址<select id="findDefault" resultMap="BaseResultMap">select * from mall_address where member_id=#{id} and is_default=0</select>
//查询非默认地址<select id="findUnDefaultList" parameterType="java.lang.Integer" resultMap="BaseResultMap">select * from mall_address where member_id=#{id} and is_default!=0</select>
//根据当前用户ID查询所有收货地址<select id="getAllById" parameterType="java.lang.Integer" resultMap="BaseResultMap">select * from mall_address where member_id = #{id}</select>

在上面的界面中 我写了一个 设为默认的功能。点击可把需要的地址设置成默认地址:具体代码实现:

Controller层

@GetMapping("/address")public String address(Model model){Address address = new Address();address.setMemberId(getMemberId());List<Address>list=addressService.findList(address);model.addAttribute("defaultAddress",addressService.findDefault());model.addAttribute("addressList",list);return "member/member_address";}@GetMapping("/address1")public String  set(@RequestParam Integer addressId){Address address=addressService.getById(addressId);address.setIsDefault(0);addressService.update(address);List<Address>list=addressService.findAllById();for (Address address1:list){if (address1.getId()!=addressId){address1.setIsDefault(1);addressService.update(address1);}}return "redirect:/member/address";}

Service层

    public Address findDefault(){Member member= (Member) session.getAttribute("sessionUser");Address address=addressMapper.findDefault(member.getId());return  address;}@Overridepublic List<Address> findList(Address param) {Member member= (Member) session.getAttribute("sessionUser");return addressMapper.findUnDefaultList(member.getId());}public List<Address>findAllById(){Member member= (Member) session.getAttribute("sessionUser");List<Address>list=addressMapper.getAllById(member.getId());return list;}

本项目接入了支付宝的沙箱环境API,模拟了用户支付系统:

后台系统:

我觉得没什么东西,不写了。

SSM项目之电商系统-爱生鲜相关推荐

  1. 【SSM项目】电商平台项目第5天——商品录入【1】

    课程目标 目标1:完成商品分类功能 目标2:了解电商概念SPU 和SKU 目标3:掌握富文本编辑器的使用 目标4:掌握上传服务器FastDFS 目标5:掌握angularJS图片上传 1.商品分类 1 ...

  2. Java项目:网上电商系统(java+SSM+mysql+maven+tomcat)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能:本系统分用户前台和管理员后台. 前台展示+后台管理,前台界面可实现用户登录,用户注 册,商品展示,商品明细展示,用户信息 ...

  3. GitHub开源项目学习 电商系统Mall (二) Mac搭建Mall前后台环境

    Mac搭建Mall前后台环境 Docker环境安装 此处不赘述,本机安装docker ce version 19.03 https://www.runoob.com/docker/macos-dock ...

  4. GitHub开源项目学习 电商系统Mall (三) SpringBoot+MyBatis搭建基本骨架

    mysql数据库环境搭建 下载并安装mysql5.7版本 设置数据库账号密码 创建数据库mall 导入Mall数据库脚本 https://github.com/macrozheng/mall-lear ...

  5. GitHub开源项目学习 电商系统Mall (四) mall整合SpringSecurity和JWT实现认证和授权(一)

    mall整合SpringSecurity和JWT实现认证和授权(一) https://github.com/macrozheng/mall 跳过了官方Learning中较简单的Swagger-UI的实 ...

  6. GitHub开源项目学习 电商系统Mall (五) mall整合SpringSecurity和JWT实现认证和授权(二)

    mall整合SpringSecurity和JWT实现认证和授权(二) https://github.com/macrozheng/mall 登录注册功能实现 UmsAdminController类 实 ...

  7. 爱购EShop 电商系统

    1.产品介绍 本产品名为爱购,基于EShop的理念,致力于通过科技的手段,使传统商业活动实现各环节的电子化.网络化.针对当下传统商业模式效率低下,员工成本较高,推出更为便捷的电商交易模式,满足商家和顾 ...

  8. mall-applet小程序项目是一套电商系统

    简介: 说明 基于SpringBoot+MyBatis的电商系统,包括前台商城系统及后台管理系统. 前言 mall项目致力于打造一个完整的电商系统,采用现阶段流行技术实现. 项目介绍 mall项目是一 ...

  9. 将模块放入到一个项目中展示_一个号称NB的开源电商系统

    前些天github看到一个开源商城.说实话开源商城+前后台已经很多了.但是这个商城还是让我下载一下试了试.原因就是界面简洁清晰,功能完善.基本可以直接拿来商业使用.看作者的提交记录,2019年10月正 ...

最新文章

  1. python模块学习---HTMLParser(解析HTML文档元素)
  2. c语言程序设计血型与遗传报告,血型遗传关系C语言编程
  3. s3c6410学习笔记-烧写uboot+构建文件系统
  4. 【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
  5. Python 正则表达式-问号的四种用法
  6. OpenCASCADE:Modeling Data之二维几何
  7. 基于Sbo SDK的Add-on插件开发实例
  8. 在Java错误产生之前对其进行处理的新方法
  9. 设计撑百万并发的数据库架构
  10. C#| 使用String.Format()方法将小数点后的数字四舍五入
  11. leetcode586. 订单最多的客户(SQL)
  12. python 除法总返回浮点
  13. [译] What is some general advice for a new PhD student?
  14. Retrofit2的再封装实战—多线程下载与断点续传(三)
  15. 九宫格c语言实验报告,9X9,九宫格测试,C编程。
  16. 阿里销售铁军:阿里巴巴客户跟进流程
  17. 数据禾|2001年珠江-西江经济带植被类型分布数据
  18. 电商系统商品库的基本功能设计与实现
  19. [NOI2008]糖果雨
  20. 基站三角定位法 java_什么是三角定位法?

热门文章

  1. 【jQuery】学习一下JS库——jQuery
  2. Phillip and Trains(dfs专题)
  3. Date日期——格式化日期时分秒
  4. AlloyTeam:致我们终将组件化的 Web (多图)
  5. GitFlow使用笔记
  6. JS 地址截取 省市区 (含自治区,直辖市,县,自治县)
  7. Oracle 查锁 和杀锁
  8. Unity技术分享之调用Youtu实现智能AI图像处理人脸识别,证照识别等
  9. px像素、em相对单位,到底是什么意思?
  10. 《Guava Floats类》学习笔记