实现分离bean实体类包和service下接口包、分离controller包、分离service下的impl实现包和mapper包

本文详细介绍了一个基于Maven的电商项目架构,包括模块化设计、技术框架版本配置、前后端分离策略。涵盖父依赖创建、API模块设计、通用工具模块、后端与前端模块划分,以及分布式SOA架构下的技术选型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在开始电商大型项目前的准备工作搭建:

实现分离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通用包)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值