1如何学习电商系统
做任何的系统,都有一套相对固定的流程。
(1)确定需求
(2)画出原型,制作静态页面。
(3)根据静态页面,画出E-R图,创建数据库。
(4)确定系统架构
(5)确定技术选型
(6)项目组分配任务
(7)确定开发环境,统一版本
(8)开发功能模块
(9)测试
(10)预发布
(11)上线
(12)运维
我们就按照这个流程来学习、开发电商项目。
2开发流程
2.1确定需求
image.png互联网电商系统的需求,一般从两个方面考虑:并发能力+功能需求。
2.1.1并发能力
所谓的并发,就是单位时间内,同时访问服务器的总次数。
本系统并发需求800-1000次/秒。(实际开发中由甲方客户确定)
2.1.2功能需求
核心功能:
(1)用户访问门户系统,可以搜索、浏览商品,并将商品添加到购物车。
(2)用户通过身份认证之后,可以下订单、支付。
(3)要完成身份认证,必须实现注册登陆功能。
(4)后台系统中,可以实现对商品、订单等的管理。
(5)CMS系统管理门户系统中的内容(商品、广告、链接等)。
2.2画出原型,制作静态页面
2.2.1后台系统页面
2.2.1.1主界面
image.png2.2.1.2商品模块
(1)商品列表
[图片上传失败...(image-c091c6-1563872349515)]
image.png(2)商品规格参数列表
image.png(3)新增商品
--主界面
image.png
--商品类目
image.png2.2.1.3CMS系统(Content Manager System)
--内容分类管理
image.png--内容列表
image.png2.2.2门户系统
(1)用户登陆
image.png(2)用户注册
image.png(3)搜索页面
image.png(4)购物车
image.png(5)订单页面
image.png2.3画出E-R图,创建数据库
(1)既然是购物平台,肯定有一张商品表
(2)每一个商品对应一个分类,需要一张商品分类表
(3)每一类商品,都对应一个规格参数的模板。需要一张参数模板表
(4)每一个商品的规格参数值都是不一样的,所以需要一张规格参数值表。
(5)每一个商品都对应有一个详细的描述信息,所以需要一张描述信息表。
目的:将大文本的描述信息抽出来,减小商品表的体积,从而提供商品表的检索效率。
(6)CMS需要一张内容分类表
(7)每一个内容分类,都有一组具体的内容,所以需要一张内容表。
(8)用户要登陆,需要一张用户表
(9)用户下单,需要一张订单表
(10)一个订单中,可以有多个商品,所以需要一张订单项表。
(11)每一个订单都有一个收件地址,需要需要一张收件人表。
image.png注意:本项目中,数据库已经设计好,将sql文件导入本地数据库即可。
2.4选择系统架构
2.4.1单一系统架构
整个项目只有一个应用,不同的功能模块以包为单位,写在同一个系统中。
image.png单一系统架构
2.4.2分布式架构
分布式指的是将一个系统拆分成多个不同的子系统,部署到不同的服务器上,系统之间通过接口的形式,相互调用。
image.png分布式架构
好处:
(1)各系统之间相互独立,以接口相互调用,代码入侵少,耦合度低。
(2)拓展性能好,新增一个功能模块时,只需要将该子系统接入即可。
(3)可以进行灵活的分布式部署和负载均衡实现。
(4)项目组分小组开发子系统,沟通成本低。
劣势:
调用接口的时候,必须开发接口,意味着增加工作量。
2.4.3确定选型后的架构图
image.png图1-5 易购商城系统架构
核心系统描述:
后台管理系统:
管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能。
前台系统:
用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作。
会员系统:
用户可以在该系统中查询已下的订单、收藏商品、我的优惠券、团购等信息。
订单系统:
提供下单、查询订单、修改订单状态、定时处理订单。
搜索系统:
提供商品的搜索功能。
单点登录系统:
为多个系统之间提供用户登录凭证以及查询登录用户的信息。
2.5技术选型(主要技术)
Spring、SpringMVC、Mybatis-Plus
JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本编辑器)、CSS+DIV
Redis(缓存服务器)
Solr(搜索)
Activemq(消息推送)
Httpclient、jsonp(调用系统服务,系统之间相互调用)
Mysql
tenginx(web服务器)
Linux(项目最终部署的地方)
2.6项目组任务分配
产品经理:2人,确定需求以及给出产品原型图。
项目经理:1人,项目管理。
前端团队:3人,根据产品经理给出的原型制作静态页面。
后端团队:6-8人,实现产品功能。
测试团队:2人,测试所有的功能。
运维团队:2人,项目的发布以及维护。
开发周期6-8个月。
2.7确定开发环境
2.7.1确定jdk版本
--说明:这里我们选择jdk1.8。(先安装jdk1.8)
注意:确定安装的是jdk,而不是jre
[图片上传失败...(image-fe779f-1563872349514)]
image.png2.7.2安装Maven插件
2.7.2.1第一步:安装maven到本地磁盘
(1)解压Maven安装包
image.png(2)解压老师提供的Maven仓库。(jar包齐全,不用从中央仓库下载)
image.png(3)修改/conf/setting.xml文件,指定仓库地址。
<localRepository>D:\install\maven\maven_repository</localRepository>
(4)修改/conf/setting.xml文件,修改中央仓库为阿里云
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
(5)修改/conf/setting.xml文件,修改jdk版本为1.8
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
2.7.2.2第二步:在Eclipse中安装Maven插件
(1)安装maven插件
image.png(2)添加本地的maven到Eclipse中
image.png(3)指定默认的Maven插件
image.png(4)加载Maven的配置setting.xml,更新本地仓库
image.png2.8功能开发
根据确定之后的需求和任务分配,完成功能模块的开发。
3后台管理系统搭建
3.1后台系统结构
image.png说明:
(1)ego-project是全局项目,是一个聚合工程,用来管理分布式下的所有子系统。
(2)ego-base是公共组件系统,定义工具类、pojo和mapper等。
(3)ego-manager是后台管理系统,依赖ego-base系统,通过maven坐标引入。
3.2配置步骤说明
(1)创建ego-project聚合系统
(2)创建ego-base公共系统
(3)创建ego-manager后台管理系统
3.3配置步骤
3.3.1第一部分:创建ego-project聚合工程
3.3.1.1第一步:创建项目
使用Maven创建项目(选择pom模型)
image.png3.3.1.2第二步:集中定义jar、插件版本(锁定版本号)
修改pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.gzsxt.ego</groupId>
<artifactId>ego-project</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<!-- 集中定义依赖版本号 -->
<properties>
<junit.version>4.12</junit.version>
<spring.version>4.3.16.RELEASE</spring.version>
<mybatis.plus.version>2.3</mybatis.plus.version>
<mysql.version>5.1.40</mysql.version>
<slf4j.version>1.6.4</slf4j.version>
<jackson.version>2.9.5</jackson.version>
<druid.version>1.0.9</druid.version>
<httpclient.version>4.3.5</httpclient.version>
<jstl.version>1.2</jstl.version>
<servlet-api.version>2.5</servlet-api.version>
<jsp-api.version>2.0</jsp-api.version>
<joda-time.version>2.5</joda-time.version>
<commons-lang3.version>3.3.2</commons-lang3.version>
<commons-io.version>1.3.2</commons-io.version>
<commons-net.version>3.3</commons-net.version>
<commons-fileupload.version>1.3.1</commons-fileupload.version>
<jedis.version>2.7.2</jedis.version>
<solrj.version>4.10.3</solrj.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 时间操作组件 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
<!-- Apache工具组件 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>${commons-io.version}</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>${commons-net.version}</version>
</dependency>
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- 日志处理 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatis.plus.version}</version>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- JSP相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>${jstl.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet-api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>${jsp-api.version}</version>
<scope>provided</scope>
</dependency>
<!-- 文件上传组件 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons-fileupload.version}</version>
</dependency>
<!-- Redis客户端 -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<!-- solr客户端 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>${solrj.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- 资源文件拷贝插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
3.3.2第二部分:创建ego-base工程
说明:ego-base是聚合工程中的一个子系统,使用maven module创建
3.3.2.1第一步:创建项目
image.png image.png image.png3.3.3第三部分:创建后台管理系统
3.3.3.1第一步:创建ego-manager(war模型)
(1)使用Maven module创建
image.png(2)在/WEB-INF/路径下,添加一个web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd ">
</web-app>
(3)修改pom.xml文件,添加ego-base依赖,通过maven坐标引入
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.gzsxt.ego</groupId>
<artifactId>ego-project</artifactId>
<version>1.0</version>
</parent>
<artifactId>ego-manager</artifactId>
<packaging>war</packaging>
<dependencies>
<!-- 添加ego-base依赖 -->
<dependency>
<groupId>cn.gzsxt.ego</groupId>
<artifactId>ego-base</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
3.4编译ego-project工程
(1)更新ego-project聚合工程
image.png(2)安装到本地仓库(maven clean、maven install)
image.png(3)编译成功
image.png4ego-manager整合
4.1整合步骤说明
(1)搭建环境。(导包、静态资源+jsp)
(2)Spring整合SpringMVC
(3)Spring整合Mybatis-plus
(4)整合测试
4.2第一部分:搭建环境
4.2.1第一步:导入jar包
(1)导入的包说明:
Spring核心包(4个)
Common-logging日志包
Spring事物+jdbc
Spring切面+AOP
Mybatis-plus核心包
Jdbc驱动+连接池druid
Jsp+servlet+jstl
(2)修改pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.gzsxt.ego</groupId>
<artifactId>ego-project</artifactId>
<version>1.0</version>
</parent>
<artifactId>ego-manager</artifactId>
<packaging>war</packaging>
<dependencies>
<!-- 添加ego-base依赖 -->
<dependency>
<groupId>cn.gzsxt.ego</groupId>
<artifactId>ego-base</artifactId>
<version>1.0</version>
</dependency>
<!-- servlet及jsp、jstl依赖 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<scope>provided</scope>
</dependency>
<!--
spring最小的pom依赖配置
如果实在记不清,给每一个包单独添加pom也是可行的。
-->
<!-- spring核心包 4个核心组件+日志包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<!-- spring-jdbc及事物依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<!-- spring切面依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
<!-- springmvc 及 spring-web依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<!-- 导入mybatis相关依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
</dependency>
<!-- mysql连接驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
</dependencies>
</project>
4.2.2第二步:导入静态资源、jsp页面
说明:静态资源、jsp页面,都放到/WEB-INF/路径下
image.png4.3第二部分:Spring整合SpringMVC
4.3.1第一步:在src目录下创建spring-mvc.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 1、开启注解扫描 -->
<context:component-scan base-package="cn.gzsxt.manager"/>
<!-- 2、开启注解驱动 -->
<mvc:annotation-driven/>
<!-- 3、由于jsp存放路径在WEB-INF下面,默认视图解析器解析不到,需要自己配一个视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 4、由于css、js都放在了WEB-INF路径下,受保护,需要配置资源映射才可以被访问到 -->
<mvc:resources location="/WEB-INF/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/WEB-INF/css/" mapping="/css/**"></mvc:resources>
</beans>
4.3.2第二步:配置Springmvc核心控制器
修改web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_2_5.xsd ">
<!-- 配置编码过滤器,防止post请求乱码 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-*.xml</param-value>
</init-param>
<!-- 项目启动的时候,就加载spring容器 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
4.3.3第三步:整合测试
需求:访问后台管理系统首页。
4.3.3.1Step1:创建PageController类
package cn.gzsxt.manager.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PageController {
@RequestMapping("/")
public String showIndex(){
System.out.println("跳转到后台管理系统首页!");
return "index";
}
}
4.3.3.2Step2:配置Tomcat插件启动项目
修改ego-manager项目的pom.xml文件,添加tomcat插件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.gzsxt.ego</groupId>
<artifactId>ego-project</artifactId>
<version>1.0</version>
</parent>
<artifactId>ego-manager</artifactId>
<packaging>war</packaging>
<build>
<plugins>
<!-- 配置Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<!--
在插件中,指定项目的访问路径
指定项目访问的端口
-->
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.3.3.3Step3:重新编译ego-manager项目
[图片上传失败...(image-475a8e-1563872474259)]
![image.png](https://img.haomeiwen.com/i17397216/7fdce1320e5c758c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4.3.3.4Step4:启动项目
说明:通过tomcat插件启动项目。
[图片上传失败...(image-32caba-1563872474259)]
![image.png](https://img.haomeiwen.com/i17397216/db46649222cdb641.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4.3.3.5Step5:访问index首页
后台地址:[http://localhost:8080/](http://localhost:8080/)
[图片上传失败...(image-1d4cb2-1563872474259)]
![image.png](https://img.haomeiwen.com/i17397216/9123c5a54e062957.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
--Spring整合Springmvc成功!!!
4.3.3.6Step6:访问其它页面
(1)修改PageController,使用路径变量绑定要访问页面
package cn.gzsxt.manager.controller;
import javax.swing.plaf.synth.SynthStyle;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PageController {
@RequestMapping("/")
public String showIndex(){
System.out.println("跳转到首页index");
return "index";
}
/**
* 请求路径格式: http://localhost:8080/item-list
* @param page
* @return
*/
@RequestMapping("/{page}")
public String showPage(@PathVariable("page")String page){
System.out.println("跳转到"+page+".jsp页面");
return page;
}
}
--测试:访问添加商品页面
[图片上传失败...(image-83e69a-1563872474259)]
![image.png](https://img.haomeiwen.com/i17397216/944d6902d2d4bbaf.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
4.4第三部分: Mybatis-plus整合Spring
思路:
(1)配置数据源
(2)配置会话工厂
(3)配置Mybaits动态代理
(4)配置事物代理
4.4.1第一步:创建resource.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ego
jdbc.username=root
jdbc.password=gzsxt
4.4.2第二步:创建spring-data.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<context:property-placeholder file-encoding="utf-8" location="classpath:resource.properties"/>
<!-- 1、创建数据源-->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 初始化最大连接数 -->
<property name="maxActive" value="10"></property>
<!-- 最小空闲数 -->
<property name="minIdle" value="2"></property>
</bean>
<!-- 2、mybatis-plus整合spring
因为dataSource是交给spring在管理,所有mybatis要使用数据源,就必须整合到spring中。
-->
<!-- MP 提供的 MybatisSqlSessionFactoryBean -->
<bean id="sqlSessionFactoryBean"
class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 别名处理 -->
<property name="typeAliasesPackage" value="cn.gzsxt.manager.pojo"></property>
<!-- 自定义mapper.xml存放目录 -->
<property name="mapperLocations" value="classpath:mybatis/*/*.xml"/>
<!-- 注入全局MP策略配置 -->
<property name="globalConfig" ref="globalConfiguration"></property>
<!-- 插件注册 -->
<property name="plugins">
<list>
<!-- 注册分页插件 -->
<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor" />
<!-- 注入 SQL 性能分析插件,建议在开发环境中使用,可以在控制台查看 SQL 执行日志 -->
<bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
<property name="maxTime" value="1000" />
<!--SQL 是否格式化 默认false-->
<property name="format" value="true" />
</bean>
</list>
</property>
</bean>
<!-- 定义 MybatisPlus 的全局策略配置-->
<bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!-- 在 2.3 版本以后,dbColumnUnderline 默认值是 true,即pojo属性开启驼峰标识 -->
<property name="dbColumnUnderline" value="true"></property>
<!-- 全局的主键策略 -->
<!--
AUTO->`0`("数据库ID自增")
INPUT->`1`(用户输入ID")
ID_WORKER->`2`("全局唯一ID")
UUID->`3`("全局唯一ID")
-->
<property name="idType" value="0"></property>
<!-- 全局的表前缀策略配置 -->
<property name="tablePrefix" value="tb_"></property>
</bean>
<!-- 3、配置mybatis,生成动态代理 -->
<bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定给哪个工厂生成代理 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
<!-- 指定接口所在包 -->
<property name="basePackage" value="cn.gzsxt.manager.mapper"></property>
</bean>
<!-- 4、配置事物管理器 -->
<bean name="tm" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 5、定义事物的规则 -->
<tx:advice id="tx" transaction-manager="tm">
<tx:attributes>
<!-- isolation="DEFAULT" 事物的隔离级别,也叫做READ_COMMINTED
propagation="REQUIRED" 事物的传播行为
rollback-for="EXCEPTION" 回滚机制。
在service层,如果手动处理了异常,事物不会自动回滚。
rollback-for="EXCEPTION"作用:在有异常时,强制回滚事物。
-->
<tx:method name="insert*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="EXCEPTION"/>
<tx:method name="save*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="EXCEPTION"/>
<tx:method name="delete*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="EXCEPTION"/>
<tx:method name="update*" isolation="DEFAULT" propagation="REQUIRED" rollback-for="EXCEPTION"/>
<tx:method name="select*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="login*" read-only="true"/>
</tx:attributes>
</tx:advice>
<!-- 6、定义事物的切面 -->
<aop:config>
<aop:pointcut expression="execution(* cn.gzsxt.manager.service.*.*(..))" id="pointcut"/>
<aop:advisor advice-ref="tx" pointcut-ref="pointcut"/>
</aop:config>
</beans>
4.5第四部分:SSM整合测试
4.5.1需求
根据id查询商品信息。
4.5.2配置步骤
4.5.2.1第一步:创建Item类
package cn.gzsxt.manager.pojo;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
@TableName(value="tb_item")
public class Item {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String title;
@TableField(value = "sell_point")
private String sellPoint;
private long price;
private int num;
private String barcode;
private String image;
private long cid;
private byte status;
private Date created;
private Date updated;
public Item() {
super();
}
// 补全get、set方法
}
4.5.2.2第二步:创建ItemMapper接口
package cn.gzsxt.manager.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import cn.gzsxt.manager.pojo.Item;
public interface ItemMapper extends BaseMapper<Item>{
}
4.5.2.3第三步:创建ItemService接口及其实现类
(1)创建ItemService
package cn.gzsxt.manager.service;
import com.baomidou.mybatisplus.service.IService;
import cn.gzsxt.base.pojo.Item;
import cn.gzsxt.base.vo.EUDataGridResult;
public interface ItemService extends IService<Item>{
}
(2)创建ItemServiceImpl类
package cn.gzsxt.manager.service;
import org.springframework.stereotype.Service;
import cn.gzsxt.manager.mapper.ItemMapper;
import cn.gzsxt.manager.pojo.Item;
@Service
public class ItemServiceImpl extends ServiceImpl<ItemMapper, Item> implements ItemService{
}
4.5.2.4第四步:创建ItremController类
package cn.gzsxt.manager.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import cn.gzsxt.manager.pojo.Item;
import cn.gzsxt.manager.service.ItemService;
@Controller
@RequestMapping("/item")
public class ItemController {
@Autowired
private ItemService itemService;
@RequestMapping("/{id}")
@ResponseBody
public Item getById(@PathVariable("id")Long id){
Item item = itemService.selectById(id);
return item;
}
}
4.5.2.5第五步:重新编译项目、安装到本地仓库
4.5.3整合测试
重启项目,浏览器访问地址 [http://localhost:8080/item/](http://localhost:8080/item/) 536563
4.5.3.1碰到的问题及解决办法
(1)json对象转换异常
[图片上传失败...(image-9f77fb-1563872474258)]
![image.png](https://img.haomeiwen.com/i17397216/f695f17e48a4c8cb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
原因:
Springmvc返回json对象时,需要添加jackson依赖。
解决办法:
在ego-manager工程中,修改pom.xml文件,添加Jackson依赖。
<!-- Jackson Json处理工具包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
4.5.3.2测试结果
[图片上传失败...(image-9536a7-1563872474258)]
![image.png](https://img.haomeiwen.com/i17397216/4981f88d12c2da85.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
SSM整合成功!!!
5配置ego-base工程
5.1必要性
除了ego-manager系统外,其它的子系统也需要用到pojo、mapper。
因此,在ego-base中创建pojo、mapper,就只需要创建一次了。
5.2配置步骤
配置步骤说明:
(1)将pojo、mapper复制到ego-base工程对应的包路径下。
(2)修改ego-manager扫描路径
5.2.1第一步:复制pojo、mapper到ego-base中
[图片上传失败...(image-b3920d-1563872474258)]
![image.png](https://img.haomeiwen.com/i17397216/6b4bdcae2cd4fe53.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
5.2.2第二步:添加mybatis-plus依赖
修改pom.xml文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.gzsxt.ego</groupId>
<artifactId>ego-project</artifactId>
<version>1.0</version>
</parent>
<artifactId>ego-base</artifactId>
<dependencies>
<!-- 导入mybatis-plus相关依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
</dependency>
</dependencies>
</project>
5.2.3第三步:修改ego-project工程中pojo、mapper扫描路径
--修改spring-data.xml文件
<!-- 2、mybatis-plus整合spring
因为dataSource是交给spring在管理,所有mybatis要使用数据源,就必须整合到spring中。
-->
<!-- MP 提供的 MybatisSqlSessionFactoryBean -->
<bean id="sqlSessionFactoryBean"
class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource"></property>
<!-- 别名处理 -->
<property name="typeAliasesPackage" value="cn.gzsxt.base.pojo"></property>
<!-- 注入全局MP策略配置 -->
<property name="globalConfig" ref="globalConfiguration"></property>
<!-- 插件注册 -->
<property name="plugins">
<list>
<!-- 注册分页插件 -->
<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor" />
<!-- 注入 SQL 性能分析插件,建议在开发环境中使用,可以在控制台查看 SQL 执行日志 -->
<bean class="com.baomidou.mybatisplus.plugins.PerformanceInterceptor">
<property name="maxTime" value="1000" />
<!--SQL 是否格式化 默认false-->
<property name="format" value="true" />
</bean>
</list>
</property>
</bean>
<!-- 定义 MybatisPlus 的全局策略配置-->
<bean id ="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!-- 在 2.3 版本以后,dbColumnUnderline 默认值是 true,即pojo属性开启驼峰标识 -->
<property name="dbColumnUnderline" value="true"></property>
<!-- 全局的主键策略 -->
<!--
AUTO->`0`("数据库ID自增")
INPUT->`1`(用户输入ID")
ID_WORKER->`2`("全局唯一ID")
UUID->`3`("全局唯一ID")
-->
<property name="idType" value="0"></property>
<!-- 全局的表前缀策略配置 -->
<property name="tablePrefix" value="tb_"></property>
</bean>
<!-- 3、配置mybatis,生成动态代理 -->
<bean name="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定给哪个工厂生成代理 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
<!-- 指定接口所在包 -->
<property name="basePackage" value="cn.gzsxt.base.mapper"></property>
</bean>
重新编译ego-project工程即可!!!
6查询商品列表实现
6.1前端js实现
商品列表使用EasyUI-datagrid插件来加载。
[图片上传失败...(image-8db4d0-1563872474257)]
![image.png](https://img.haomeiwen.com/i17397216/bd1427d39dc4b1bb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
EasyUI-datagrid插件对返回数据格式要求为:
{total:”2”,rows:[{“id”:”1”,”name”,”张三”},{“id”:”2”,”name”,”李四”}]}
6.2后台java实现
6.2.1代码结构
Controller:接收参数,接收分页信息,响应实体数据
Service:业务处理,分页处理
Mapper:逆向工程生成,不需要开发。
<colgroup><col style="width: 86px;"><col style="width: 317px;"></colgroup>
|
请求路径
|
/item/list
|
|
请求方式
|
Get请求
|
|
请求参数
|
page=1&rows=30 (easyui-datagrid插件规定)
|
|
返回值
|
{total:”2”,rows:List<?>}
|
注意:请求参数在jquery.easyui.min.js中定义,如下图:
[图片上传失败...(image-18c904-1563872474257)]
![image.png](https://img.haomeiwen.com/i17397216/e2f08b48c623cf67.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
响应值格式,也在jquery.easyui.min.js中定义,如下图:
[图片上传失败...(image-aa3d1d-1563872474257)]
![image.png](https://img.haomeiwen.com/i17397216/2e386c4ef3923475.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
6.2.2创建返回结果类型pojo
在ego-base工程中创建。
package cn.gzsxt.base.vo;
import java.util.List;
/**
*
* 自定义EasyUIDateGrid支持的数据结果集
*/
public class EUDataGridResult {
private long total;
private List<?> rows;
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
}
}
6.2.3Service层实现
public EUDataGridResult listAndPage(int curPage,int rows){
EUDataGridResult result = new EUDataGridResult();
Page<Item> page = selectPage(new Page<Item>(cpage,rows));
result.setRows(page.getRecords());
result.setTotal(page.getTotal());
return result;
}
###6.2.4controller层实现
@RequestMapping("/list")
@ResponseBody
public EUDataGridResult listAndPage(int page,int rows){
EUDataGridResult result = itemService.listAndPage(page, rows);
return result;
}
###6.2.5测试效果,如下图
![image.png](https://img.haomeiwen.com/i17397216/ddaeca5d82b09bb7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
网友评论