|
易购商城 |
第一天 |
|
目 录
1 学习计划 3
1.1 目标 3
1.2 为什么要学习电商系统? 3
1.3 如何学习电商系统 3
2 开发流程 4
2.1 确定需求 4
2.1.1 并发能力 4
2.1.2 功能需求 4
2.2 画出原型,制作静态页面 5
2.2.1 后台系统页面 5
2.2.2 门户系统 7
2.3 画出E-R图,创建数据库 9
2.4 选择系统架构 10
2.4.1 单一系统架构 10
2.4.2 分布式架构 10
2.4.3 确定选型后的架构图 11
2.5 技术选型(主要技术) 12
2.6 项目组任务分配 12
2.7 确定开发环境 13
2.7.1 确定jdk版本 13
2.7.2 安装Maven插件 13
2.8 功能开发 15
3 后台管理系统搭建 16
3.1 后台系统结构 16
3.2 配置步骤说明 16
3.3 配置步骤 17
3.3.1 第一部分:创建ego-project聚合工程 17
3.3.2 第二部分:创建ego-base工程 22
3.3.3 第三部分:创建后台管理系统 23
3.4 编译ego-project工程 24
4 ego-manager整合 25
4.1 整合步骤说明 25
4.2 第一部分:搭建环境 26
4.2.1 第一步:导入jar包 26
4.2.2 第二步:导入静态资源、jsp页面 28
4.3 第二部分:Spring整合SpringMVC 28
4.3.1 第一步:在src目录下创建spring-mvc.xml文件 28
4.3.2 第二步:配置Springmvc核心控制器 29
4.3.3 第三步:整合测试 30
4.4 第三部分: Mybatis-plus整合Spring 34
4.4.1 第一步:创建resource.properties文件 34
4.4.2 第二步:创建spring-data.xml文件 34
4.5 第四部分:SSM整合测试 38
4.5.1 需求 38
4.5.2 配置步骤 38
4.5.3 整合测试 41
5 配置ego-base工程 42
5.1 必要性 42
5.2 配置步骤 42
5.2.1 第一步:复制pojo、mapper到ego-base中 43
5.2.2 第二步:添加mybatis-plus依赖 43
5.2.3 第三步:修改ego-project工程中pojo、mapper扫描路径 44
6 查询商品列表实现 45
6.1 前端js实现 45
6.2 后台java实现 46
6.2.1 代码结构 46
6.2.2 创建返回结果类型pojo 47
6.2.3 Service层实现 48
6.2.4 controller层实现 48
6.2.5 开心一刻 49
- 学习计划
- 目标
根据需求,完成一个互联网电商系统。
电商系统:以淘宝、京东为代表的网购平台。
-
- 为什么要学习电商系统?
电商系统涉及的技术非常全面,包括SSM核心框架、linux、redis、solr、mq等全部的框架和技术。
学好了电商系统,就能掌握如何利用我们所需的知识,在工作中开发项目。
-
- 如何学习电商系统
做任何的系统,都有一套相对固定的流程。
(1)确定需求
(2)画出原型,制作静态页面。
(3)根据静态页面,画出E-R图,创建数据库。
(4)确定系统架构
(5)确定技术选型
(6)项目组分配任务
(7)确定开发环境,统一版本
(8)开发功能模块
(9)测试
(10)预发布
(11)上线
(12)运维
我们就按照这个流程来学习、开发电商项目。
- 开发流程
- 确定需求
互联网电商系统的需求,一般从两个方面考虑:并发能力+功能需求。
-
-
- 并发能力
-
所谓的并发,就是单位时间内,同时访问服务器的总次数。
本系统并发需求800-1000次/秒。(实际开发中由甲方客户确定)
-
-
- 功能需求
-
核心功能:
(1)用户访问门户系统,可以搜索、浏览商品,并将商品添加到购物车。
(2)用户通过身份认证之后,可以下订单、支付。
(3)要完成身份认证,必须实现注册登陆功能。
(4)后台系统中,可以实现对商品、订单等的管理。
(5)CMS系统管理门户系统中的内容(商品、广告、链接等)。
-
- 画出原型,制作静态页面
- 后台系统页面
- 主界面
- 后台系统页面
- 画出原型,制作静态页面
-
-
-
- 商品模块
-
-
(1)商品列表
(2)商品规格参数列表
(3)新增商品
--主界面
--商品类目
-
-
-
- CMS系统(Content Manager System)
-
-
--内容分类管理
--内容列表
-
-
- 门户系统
-
(1)用户登陆
(2)用户注册
(3)搜索页面
(4)购物车
(5)订单页面
-
- 画出E-R图,创建数据库
(1)既然是购物平台,肯定有一张商品表
(2)每一个商品对应一个分类,需要一张商品分类表
(3)每一类商品,都对应一个规格参数的模板。需要一张参数模板表
(4)每一个商品的规格参数值都是不一样的,所以需要一张规格参数值表。
(5)每一个商品都对应有一个详细的描述信息,所以需要一张描述信息表。
目的:将大文本的描述信息抽出来,减小商品表的体积,从而提供商品表的检索效率。
(6)CMS需要一张内容分类表
(7)每一个内容分类,都有一组具体的内容,所以需要一张内容表。
(8)用户要登陆,需要一张用户表
(9)用户下单,需要一张订单表
(10)一个订单中,可以有多个商品,所以需要一张订单项表。
(11)每一个订单都有一个收件地址,需要需要一张收件人表。
注意:本项目中,数据库已经设计好,将sql文件导入本地数据库即可。
-
- 选择系统架构
- 单一系统架构
- 选择系统架构
整个项目只有一个应用,不同的功能模块以包为单位,写在同一个系统中。
单一系统架构
-
-
- 分布式架构
-
分布式指的是将一个系统拆分成多个不同的子系统,部署到不同的服务器上,系统之间通过接口的形式,相互调用。
分布式架构
好处:
(1)各系统之间相互独立,以接口相互调用,代码入侵少,耦合度低。
(2)拓展性能好,新增一个功能模块时,只需要将该子系统接入即可。
(3)可以进行灵活的分布式部署和负载均衡实现。
(4)项目组分小组开发子系统,沟通成本低。
劣势:
调用接口的时候,必须开发接口,意味着增加工作量。
-
-
- 确定选型后的架构图
-
图1-5 易购商城系统架构
核心系统描述:
后台管理系统:
管理商品、订单、类目、商品规格属性、用户管理以及内容发布等功能。
前台系统:
用户可以在前台系统中进行注册、登录、浏览商品、首页、下单等操作。
会员系统:
用户可以在该系统中查询已下的订单、收藏商品、我的优惠券、团购等信息。
订单系统:
提供下单、查询订单、修改订单状态、定时处理订单。
搜索系统:
提供商品的搜索功能。
单点登录系统:
为多个系统之间提供用户登录凭证以及查询登录用户的信息。
-
- 技术选型(主要技术)
- Spring、SpringMVC、Mybatis-Plus
- JSP、JSTL、jQuery、jQuery plugin、EasyUI、KindEditor(富文本编辑器)、CSS+DIV
- Redis(缓存服务器)
- Solr(搜索)
- Activemq(消息推送)
- Httpclient、jsonp(调用系统服务,系统之间相互调用)
- Mysql
- tenginx(web服务器)
- Linux(项目最终部署的地方)
-
- 项目组任务分配
产品经理:2人,确定需求以及给出产品原型图。
项目经理:1人,项目管理。
前端团队:3人,根据产品经理给出的原型制作静态页面。
后端团队:6-8人,实现产品功能。
测试团队:2人,测试所有的功能。
运维团队:2人,项目的发布以及维护。
开发周期6-8个月。
-
- 确定开发环境
- 确定jdk版本
- 确定开发环境
--说明:这里我们选择jdk1.8。(先安装jdk1.8)
注意:确定安装的是jdk,而不是jre
-
-
- 安装Maven插件
- 第一步:安装maven到本地磁盘
- 安装Maven插件
-
(1)解压Maven安装包
(2)解压老师提供的Maven仓库。(jar包齐全,不用从中央仓库下载)
(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> |
-
-
-
- 第二步:在Eclipse中安装Maven插件
-
-
(1)安装maven插件
(2)添加本地的maven到Eclipse中
(3)指定默认的Maven插件
(4)加载Maven的配置setting.xml,更新本地仓库
-
- 功能开发
根据确定之后的需求和任务分配,完成功能模块的开发。
- 后台管理系统搭建
- 后台系统结构
说明:
(1)ego-project是全局项目,是一个聚合工程,用来管理分布式下的所有子系统。
(2)ego-base是公共组件系统,定义工具类、pojo和mapper等。
(3)ego-manager是后台管理系统,依赖ego-base系统,通过maven坐标引入。
-
- 配置步骤说明
(1)创建ego-project聚合系统
(2)创建ego-base公共系统
(3)创建ego-manager后台管理系统
-
- 配置步骤
- 第一部分:创建ego-project聚合工程
- 第一步:创建项目
- 第一部分:创建ego-project聚合工程
- 配置步骤
使用Maven创建项目(选择pom模型)
-
-
-
- 第二步:集中定义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> |
-
-
- 第二部分:创建ego-base工程
-
说明:ego-base是聚合工程中的一个子系统,使用maven module创建
-
-
-
- 第一步:创建项目
-
-
-
-
- 第三部分:创建后台管理系统
- 第一步:创建ego-manager(war模型)
- 第三部分:创建后台管理系统
-
(1)使用Maven module创建
(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> |
-
- 编译ego-project工程
(1)更新ego-project聚合工程
(2)安装到本地仓库(maven clean、maven install)
(3)编译成功
- ego-manager整合
- 整合步骤说明
(1)搭建环境。(导包、静态资源+jsp)
(2)Spring整合SpringMVC
(3)Spring整合Mybatis-plus
(4)整合测试
-
- 第一部分:搭建环境
- 第一步:导入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> |
-
-
- 第二步:导入静态资源、jsp页面
-
说明:静态资源、jsp页面,都放到/WEB-INF/路径下
-
- 第二部分:Spring整合SpringMVC
- 第一步:在src目录下创建spring-mvc.xml文件
- 第二部分:Spring整合SpringMVC
<?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> |
-
-
- 第二步:配置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> |
-
-
- 第三步:整合测试
-
需求:访问后台管理系统首页。
-
-
-
- Step1:创建PageController类
-
-
package cn.gzsxt.manager.controller;
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping;
public class PageController {
@RequestMapping("/") public String showIndex(){ System.out.println("跳转到后台管理系统首页!"); return "index"; } } |
-
-
-
- Step2:配置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> |
-
-
-
- Step3:重新编译ego-manager项目
-
-
-
-
-
- Step4:启动项目
-
-
说明:通过tomcat插件启动项目。
-
-
-
- Step5:访问index首页
-
-
--Spring整合Springmvc成功!!!
-
-
-
- Step6:访问其它页面
-
-
(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;
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; } } |
--测试:访问添加商品页面
-
- 第三部分: Mybatis-plus整合Spring
思路:
(1)配置数据源
(2)配置会话工厂
(3)配置Mybaits动态代理
(4)配置事物代理
-
-
- 第一步:创建resource.properties文件
-
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ego jdbc.username=root jdbc.password=gzsxt |
-
-
- 第二步:创建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> |
-
- 第四部分:SSM整合测试
- 需求
- 第四部分:SSM整合测试
根据id查询商品信息。
-
-
- 配置步骤
- 第一步:创建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方法
} |
-
-
-
- 第二步:创建ItemMapper接口
-
-
package cn.gzsxt.manager.mapper;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import cn.gzsxt.manager.pojo.Item;
public interface ItemMapper extends BaseMapper<Item>{
}
|
-
-
-
- 第三步:创建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{
}
|
-
-
-
- 第四步:创建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; } }
|
-
-
-
- 第五步:重新编译项目、安装到本地仓库
-
-
-
-
- 整合测试
-
重启项目,浏览器访问地址 http://localhost:8080/item/ 536563
-
-
-
- 碰到的问题及解决办法
-
-
(1)json对象转换异常
原因:
Springmvc返回json对象时,需要添加jackson依赖。
解决办法:
在ego-manager工程中,修改pom.xml文件,添加Jackson依赖。
<!-- Jackson Json处理工具包 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> |
-
-
-
- 测试结果
-
-
SSM整合成功!!!
- 配置ego-base工程
- 必要性
除了ego-manager系统外,其它的子系统也需要用到pojo、mapper。
因此,在ego-base中创建pojo、mapper,就只需要创建一次了。
-
- 配置步骤
配置步骤说明:
(1)将pojo、mapper复制到ego-base工程对应的包路径下。
(2)修改ego-manager扫描路径
-
-
- 第一步:复制pojo、mapper到ego-base中
-
-
-
- 第二步:添加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> |
-
-
- 第三步:修改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工程即可!!!
- 查询商品列表实现
- 前端js实现
商品列表使用EasyUI-datagrid插件来加载。
EasyUI-datagrid插件对返回数据格式要求为:
{total:”2”,rows:[{“id”:”1”,”name”,”张三”},{“id”:”2”,”name”,”李四”}]}
-
- 后台java实现
- 代码结构
- 后台java实现
Controller:接收参数,接收分页信息,响应实体数据
Service:业务处理,分页处理
Mapper:逆向工程生成,不需要开发。
请求路径 | /item/list |
请求方式 | Get请求 |
请求参数 | page=1&rows=30 (easyui-datagrid插件规定) |
返回值 | {total:”2”,rows:List<?>} |
注意:请求参数在jquery.easyui.min.js中定义,如下图:
响应值格式,也在jquery.easyui.min.js中定义,如下图:
-
-
- 创建返回结果类型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; } } |
-
-
- Service层实现
-
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; } |
-
-
- controller层实现
-
@RequestMapping("/list") @ResponseBody public EUDataGridResult listAndPage(int page,int rows){
EUDataGridResult result = itemService.listAndPage(page, rows);
return result; } |
-
-
- 开心一刻
-