关于电商项目的总结

首先

近段时间自己做了一个电商的项目练练手,现在得闲把他的项目架构和一些知识点总结一下。项目的Gitee地址我先放在这,有需要可以自取:
电商系统:https://gitee.com/phil0326/mall
支付系统:https://gitee.com/phil0326/pay

架构总结

包的存放格式及命名

一般以 com.cjhstdy.mall (com.公司名字.项目名称)

在这里插入图片描述

其中:

  • config: 配置文件的存放位置 XxxxConfig

需要用 @Configuration 注明才能被加载到AOP容器中

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iZEveH1b-1653122118798)(../../../AppData/Roaming/Typora/typora-user-images/image-20211213154215236.png)]
consts: 项目定义的常量文件位置,建议一般在项目中常量不写死,把他抽出来写到这个文件中 XxxConst

  • 一般把他定义为静态的FINAL类,不能修改,在后期更改可以做到统一更改
    在这里插入图片描述
    controller: 控制层,用来放控制层用于向外提供接口 XxxxController

  • 因为我们要向外提供访问的接口那么我们就要注明 @RestController @Autowired 是自动装配
    在这里插入图片描述

  • GetMapping():用于获取信息并可以携带参数,但是在方法中一定要对携带的参数进行校验 @PathVariable

  • PostMapping() : 用于表单的提交,携带的表单必须要进行校验操作,@Vaild @RequestBody

在这里插入图片描述

  • PutMapping() : 一般用于修改/更新数据库中数据
    在这里插入图片描述
  • DeleteMapping() :用于对数据的信息的删除操作
    在这里插入图片描述

dao/mapper: 操作数据库的方法 XxxMapper 接口类型 Interface

  • 记得带上 @Component 注解,不然在别的自动装配的时候会报红,虽然不影响但是还是很碍眼!!
    在这里插入图片描述
    enums: 枚举存放的位置 XxxXxxEnum 枚举类型 Enum

  • 要标注好Get方便后面的使用的时候调用,@Getter

在这里插入图片描述
exception: 异常文处理文件存放位置 XxxException

  • 一般我们用这个来做统一的异常处理,或者对某一个异常的捕获 ,一定要标注好 @ControllerAdvice

  • 对应的方法上要标注好 :@ExceptionHandler(RuntimeException.class) @ResponseBody
    在这里插入图片描述
    form: 表单提交的规范要求字段 XxxXxxForm @Data

  • 我们在做表单提交的操作的时候,有时候并不需要全部的信息,只需要个别重要的字段即可,例如登录的用户名和密码两个字段。那么这个使用我们就用这个表单去定义我们要提交表单的信息即可!

  • 注意这个必须要对表单做非空校验工作!

    • @NotBlank : 用于String类型的校验
    • @NotEmpty : 用于集合判断
    • @NotNull: 用于 Integer 的校验
      在这里插入图片描述

interceptor : 拦截器的文件存放位置,一般项目中肯定要做一些安全的访问措施,那么这时候就会用到拦截器,拦截器一般有两个文件 XxxInterceptor InterceptorConfig , 做统一的访问拦截
listener : 这个一般是用来存放 RabbitMQ 的监听器的,监听 RabbitMQ 消息队列中的信息

  • 首先要先加上注解 @Component @RabbitListener(queues = “xxxxx队列名称”)

  • 在方法上标注好 @RabbitHandler
    在这里插入图片描述
    pojo(Plain Ordinary Java Object): 对应数据库的实体类字段, java 对象其实就是 javaBean

  • 一般我们会是使用 lombok 的注解 @Data @AllArgsConstructor @NoArgsConstructor 简化开发

service : 用来装 操作的接口方法
在这里插入图片描述
service/impl :用来装实现 service 接口的实现类 ,记得标注好注解 @Service
在这里插入图片描述
vo : 一般用来装返回给前端的一些基本信息,因为我们正在开发时前端并不需要全部的字段,只需要部分,那么我们一般不会给他全部只会给他他所需要的对应信息字段,也是为了数据安全 。实体类必须加上 @Data
在这里插入图片描述

resource/mappers : 这个就是用来存放操作数据库的 SQL语句 的 xml 文件, 属于 mybatis

操作数据库的一个文件。 这个可以直接用 mybatis 的反向生成把基本需要的生成出来!具体操作看 generactorConfig.xml

在终端使用代码进行反向生成:

mvn mybatis-generator:generate

static : 用户存放静态资源的地方,如 html 等文件

templates : 用户存放动态资源的地方,如动态生成二维码的文件 .ftl
在这里插入图片描述

applacation.yaml : 这就是配置信息的文件了,所有的配置信息都可以在这里配置,有两种形式 application.yaml application.properties bootstrap.yaml bootstrap.properties , 项目推荐使用 application.yaml

banner.txt: 配置你项目启动的动画而已!!!玩玩

generactorConfig.xml :mybatis 反向生成器的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
    <!--    windows下路径, D:\downloads\xxx.jar-->
    <!--这里需要引入 jar包-->
    <classPathEntry location="C:\Java\jar\mysql-connector-java-5.1.6.jar"/>

    <context id="DB2Tables" targetRuntime="MyBatis3">

        <!--不再追加xml内容-->
        <plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

        <commentGenerator>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- 配置数据的基本信息-->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/mall?characterEncoding=utf-8"
                        userId="root"
                        password="123456">
        </jdbcConnection>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!--生成实体类,配置对应的包的信息位置-->
        <javaModelGenerator targetPackage="com.cjhstudy.mall.pojo" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!--生成dao层,配置报的位置信息-->
        <sqlMapGenerator targetPackage="mappers" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!--生成 .xml文件得生成位置信息-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.cjhstudy.mall.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>

        <table tableName="mall_order_item" domainObjectName="OrderItem" enableCountByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false"/>
    </context>
</generatorConfiguration>

log4j.properties : 日志输出的基本配置信息

test : 用于装单测文件的包

target : 这个是我们在打包好项目后的包位置

pom.xml : 这个就是 maven 项目依赖的配置位置

MD5摘要-----加密

我们在将密码写入数据库的时候都会进行对密码的加密,这种加密我们一般就会选择 MD5 加密了

user.setPassword(DigestUtils.md5DigestAsHex(user.getPassword().getBytes(StandardCharsets.UTF_8)));

开发的时候我们在判断条件的时候尽量取反把不符合的提出来,这样可提高代码的阅读性!!!

再判断符合那一类不符合那一类的时候我们只对确定的信息进行判断

PageHelper 分页的应用

 //插入分页控制
PageHelper.startPage(pageNum,pageSize);
List<Product> productList = productMapper.selectByCategoryIdSet(categoryIdSet);
List<ProductVo> productVoList = productList.stream()
    .map(e -> {
        ProductVo productVo = new ProductVo();
        BeanUtils.copyProperties(e, productVo);
        return productVo;
    })
    .collect(Collectors.toList());

PageInfo pageInfo = new PageInfo<>(productList);
pageInfo.setList(productVoList);//按规定的list形式返回

return ResponseVo.success(pageInfo);

对数据库的更新修改(update)、删除(delete)、添加(insert)时会返回该行的行号,那么我们可以通过判断返回的行号来确定是否操作成功!如果返回的是0的话那么就是说对数据的操作是失败的。

int row = shippingMapper.deleteByIdAndUid(uid, shippingId);
if (row == 0){
    return ResponseVo.error(ResponseEnum.DELETE_SHIPPING_FAIL);
}

有时候我们在开发过程中,我们插入一条信息数据库中会自动增加他的id,但是有些时候我们有需要获得这个插入的id值,那么这个时候我们就需要在 mapper.xml 文件中添加 useGeneratedKeys=“true” keyProperty=“id”

<insert id="insertSelective" parameterType="com.cjhstudy.mall.pojo.Shipping" useGeneratedKeys="true" keyProperty="id">
    .....
</insert>

结语

好了,总结就差不多写到这。基本上就是我们在做后端开发的时候每一个地方需要做的一些规范。由于做的项目较为简单所以可能不能涵盖到全部的内容,但是后期笔者接触到更多的规范会及时的跟进更新。希望对刚开始做项目的同学有一定的帮助。
收工~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明不喝牛奶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值