现在开始电商大型项目前的准备工作搭建:
实现分离bean包下的映射类和service包下的接口到api模块;
实现前端分离:分离controller包(前端页面的调用)到web模块,
实现后端分离:分离service包(后端实现impl包和mapper接口包)到service模块。
一、框架介绍
二、父依赖创建
三、api模块
四、common-util通用模块
五、service-util后端模块
六、web-util前端模块
一、框架介绍
1 工程结构
以maven为基础,对项目的分层架构
2 项目架构
分布式(SOA)
Dubbo(阿里巴巴的服务框架)
二、父依赖创建
1 创建一个maven的gmall-parent的工程
2 新建其他项目模块(子项目)的时候,就可以直接继承gmalll-parent这个模块即可
3 这里的模块gmall-parent中父依赖使用springboot1.5
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.21.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<!--打包为pom文件-->
4 在gmall-parent中定义好项目的技术框架各种版本,以下就是parent依赖用到的各种技术框架版本!!!
<properties>
<!--版本号-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<fastjson.version>1.2.46</fastjson.version>
<dubbo-starter.version>1.0.10</dubbo-starter.version>
<dubbo.version>2.6.0</dubbo.version>
<zkclient.version>0.10</zkclient.version>
<mybatis.version>1.3.1</mybatis.version>
<nekohtml.version>1.9.20</nekohtml.version>
<xml-apis.version>1.4.01</xml-apis.version>
<batik-ext.version>1.9.1</batik-ext.version>
<jsoup.version>1.11.2</jsoup.version>
<httpclient.version>4.5.5</httpclient.version>
<commons-lang3.version>3.7</commons-lang3.version>
<mapper-starter.version>1.2.3</mapper-starter.version>
<jedis.version>2.9.0</jedis.version>
<jest.version>5.3.3</jest.version>
<jna.version>4.5.1</jna.version>
<beanUtils.version>1.9.3</beanUtils.version>
</properties>
<dependencyManagement>
<dependencies>
<!--阿里的json,因为以后用到阿里的dubbo,通信的时候用到阿里dubbo通信的协议,传递对象,有时候传递json字符串-->
<!--用fastjson去转换不会报异常,而谷歌的gjson转换有时候会报异常-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<!--zk的客户端-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>${zkclient.version}</version>
</dependency>
<dependency>
<groupId>com.gitee.reger</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>${dubbo-starter.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--前端渲染框架,相当于spring的jsp前端-->
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>${nekohtml.version}</version>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>${xml-apis.version}</version>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-ext</artifactId>
<version>${batik-ext.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
<!--java里面的浏览器,假如通过java发送http.baidu.com协议,并且返回一些东西-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
</dependency>
<!--基本类型或者引入类型处理的工具包。假如判断字符串是否为空,stringUtils.isblank(s)判断s字符串是否为空-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${commons-lang3.version}</version>
</dependency>
<!--同意mapper包,用来快速实现单表的增删改查的-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper-starter.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>${jedis.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/io.searchbox/jest -->
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>${jest.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.java.dev.jna/jna -->
<dependency>
<groupId>net.java.dev.jna</groupId>
<artifactId>jna</artifactId>
<version>${jna.version}</version>
</dependency>
<!--比如有A类型的集合,要转换为B类型的集合,需要用到的包-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${beanUtils.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
三、api模块(存放映射类与接口)
1、首先建立一个模块model,起名api项目,并引入上边的父依赖
2、因为api项目下面是存放接口和实体类的,这里实体类引用了tk通用mapper映射技术(单表的增删改查),通用mapper数据库映射跟着实体类走,所以要在api模块的pom文件加入以下mapper依赖。
<dependencies>
<!-- 通用mapper,数据库映射,要跟着实体类bean,所以放在在api下,其他模块就不用引入这个依赖了-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
3、其他业务模块每次建立都要在pom文件引入api包(谨记!),因为这个api包专门放实体和接口的
<!--每新建一个项目,都要引入api模块,什么呢api里面存放着bean实体类和接口-->
<dependency>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
4、就是注意你新建立的项目要使用api的实体类或者接口,记得要注意路径是否正确,否则找bug,找到你头疼。
5、api模块的作用,你可以从原本的测试模块的bean类和service接口全部移到api模块去。这样就帮你分离了bean和service接口,在公司当中一般api模块都是先写好,其他员工直接去调用接口就可以了,非常方便!!!
四、项目中的common-util通用框架,是所有应用工程需要引入的包
<parent>
<!--正常的引入父依赖-->
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<!--json工具-->
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<!--测试(spring boot有默认版本号)-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<!--内含Tomcat容器,httpServletRequest等(spring boot有默认版本号)-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<!--restful调用客户端-->
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<!--apache工具库-->
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<!--apache处理实体bean工具库-->
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
</dependency>
<dependency>
<!--apache解码工具库-->
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
</dependencies>
五、基于soa的架构理念,项目分为后端service(serviceUtil)
引入后端service用到的技术依赖:Mybatis、mysql、redis等
并且加入通用工具包模块common-util
<parent>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<!--上边的common-util通用框架包引入-->
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-common-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<!--数据库驱动-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<!--mybatis-->
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<!--数据库连接器-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
</dependencies>
六、基于soa的架构理念,项目分为前端controller(webUtil)
使用Jsp、thymeleaf、cookie工具类等这类技术。这里就先引入thymeleaf技术,后续再加
并且加入通用工具包模块common-util加入commonUtil
<parent>
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<!--通用的util,要引入-->
<groupId>com.atguigu.gmall</groupId>
<artifactId>gmall-common-util</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
由此就把前后端都分离了!
以后每建立一个项目,就看你做前端controller模块的项目,还是后端的service模块的项目,就对应的引入依赖即可!!!
1、新建一个前端controller模块的项目:
Controller 引入 parent父依赖 + api实体类和接口 + webUtil前端技术包(含common通用包)
2、新建一个后端service模块的项目:
service 引入 parent父依赖 + api实体类和接口+serviceUtil后端技术包(含common通用包)