专栏首页零基础自学Java【微服务】143:商品分类业务的实现

【微服务】143:商品分类业务的实现

一、商品分类业务

我们的项目是刘小爱商城,其核心自然是商品了,所以就要涉及到一个商品分类业务。

1需求分析

我们先看看国内的主流网站上是如何做的?

比如说家用电器,这是一级类目。

它又分为很多种:比如说电视、空调、洗衣机、冰箱……等,这是二级类目。

并且还能够垂直细分,比如说电视又可以被分为:超薄电视、全面屏电视……等。

好,如何用代码实现这种需求?

一个需求拿到手中了,优先建立数据模型

  • 前端页面中的这些数据如何存放到数据库中?
  • 数据库中的表如何设计,有哪些字段?
  • 设计Java实体类和数据表对应?

这些问题解决了,方向也就定了,剩下的就是具体代码的编写了。

所以说数据模型是非常重要的,你想呀,方向都弄错了,写再多的代码有什么用?

2数据库表关系梳理

商品分类这是一个多级类目的关系。

家用电器是一个父节点,它有多个子节点,子节点往下又有子节点,所以表字段设计:

  • id和name表字段这不用多说。
  • 通过表字段parent_id指定对应父节点的id?
  • 通过表字段is_parent确定它是否是父节点?
  • 如果是true表示它是父节点,有子节点。
  • 如果是false表示它不是父节点,没有子节点。

这样就能把表数据自关联起来了,无论多少级关系,都能表示清楚了。

值得注意的是

  • 数据表字段单词之间用下划线“_”隔开。
  • is_parent是一个布尔值,但是在数据表中用0和1表示,0为false,1为true。

3前端vue代码的编写

好数据分析完成,先从前端页面开始编写,因为请求是从前端页面发出的。

当然实际开发中应该都是根据开发文档来各自完成,我这边的话都得自己来弄。

Category.vue是分类业务对应的具体vue,v-card:卡片,是vuetify框架中提供的组件。

至于具体的前端代码编写,我们不做详细介绍,但是有一点我们要搞清楚:

页面发送的请求路径是怎样的?

后台服务器得根据这个路径来接受请求。

我们可以发现:请求路径为baseUrl+url,也就是上述中两个url相连接。

同时再通过浏览器F12打开控制台确认其请求路径是否是这样的?

二、后台代码编写

1Java实体类

注意实体类是存放在微服务lxa-item的lxa-item-pojo子工程中:

数据库中的表tb_category,关于字段和我们一开始的分析基本一致,多了一个sort属性。

而Category实体类使用通用mapper将其和表tb_category一一对应起来。

2启动类及mapper层

该业务逻辑很简单,只涉及到了单表查询,所以使用通用mapper即可。

注意具体的业务代码是存放在微服务lxa-item的lxa-item-service子工程中:

①mapper层代码编写

因为是单表查询,所以直接使用通用mappe即可,继承通用mapper中的Mapper接口即可,泛型为对应的实体类Category。

②启动类编写

因为使用了通用mapper,所以要通过注解@MapperScan确定扫描mapper的路径。

另外两个注解一个开启eureka客户端,一个说明是SpringBoot启动类,写过很多遍了。

注意:通用mapper相关的包为tk开头,一定要注意导包不要导错了。

3Controller层和Service层

①Controller层代码

确认其请求路径:category/list?pid=0

先不考虑网关,直接把整个业务写出来。

请求路径中参数是以问号的形式拼接到路径中的,所以用注解@RequestParam接受参数。

如果是category/list/1这样直接出现在请求路径中,就用注解@Pathvarible接受参数。

②Servic层代码

因为pid并不是tb_category表中的主键,所以创建一个对象设定pid再查询。

注意,做一个提醒

关于通用mapper的使用我专门写过一篇教程,就不做赘述了。

其中还应该做结果判断的处理,如果查询到的数据为空要报错,我这边暂时没做处理。

三、网关测试

代码编写完毕做一个测试:

①直接访问

直接在浏览器上输入对应的路径,参数pid设置为0,可以从数据库中查询到对应数据。

其查询的数据结果上图右侧有显示。

②通过网关访问

回顾:网关的作用相当于加了一层保护,其本质还是会跳转直接访问时的那个路径。

  • prefix:添加路由前缀,网关访问时路径都要加上设置的这个路由前缀。
  • routes:添加路由,item/及其子路径全部都会跳转到item-service这个微服务。

再次强调:每新建一个微服务,我们都要以相同的方式配置其网关路由。

③通过域名访问

如果通过我们昨天设定的网关域名访问,会发现浏览器控制台上报错了,

具体什么原因呢?

涉及到了一个跨域问题,关于该问题,时间受限,我们明天再做说明。

本文分享自微信公众号 - 刘小爱(liuxiaoai946),作者:刘小爱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【Java】基础39:过滤器

    就拿上述例子来说:是,确实解决了查找图片的需求,但是如果现在要查找音乐文件呢?该怎么办?如果要查找视频文件呢?

    刘小爱
  • 【Java】基础41:什么叫IO流?

    它是输出流最上层的父类,是一个抽象类,其中它有一个子类叫FileOutputStream。

    刘小爱
  • 【JavaWeb】66:JDBC封装

    所以决定还是学一下jdbc具体是如何写的?以及是如何一步步封装的?其中JDBC一共有6步:

    刘小爱
  • 又一网盘倒下了 只剩下百度网盘在支撑!

    首先说一下,号主搭建的百度共享网盘由于每个月只有不到10个人,甚至有时不到5个人正在用,所以号主已经停止续费了,如果只有这么几个人在用,号主的搭建就没有了意义,...

    FreeRonin
  • 用机器学习来概括《哈利波特》,视频也可以有“太长不看版”

    一位叫做Sagi Shaier的程序猿,用机器学习给《哈利·波特》电影片段,做了一份太长不看的概括版。

    量子位
  • 微信终端跨平台组件 mars 系列 - 我们如约而至

    用户1907613
  • 微信终端跨平台组件 Mars 系列:我们如约而至

    网络作为微信的基础,重要性不言而喻。任何网络实现的 bug 都可能导致重大事故。例如微信的容灾实现,如果因为版本的实现差异,导致某些版本上无法进行容灾恢复,将会...

    张绍文
  • Python 面试:“一行代码实现 xx”类题目(带答案)

    最近,我被 “一行代码实现 xx” 这类问题疯狂吸引,主要是作为一个能躺着绝不坐着的懒人,代码能少写坚决少写,而且这类问题也蛮有意思,所以汇总了一下,顺便把答案...

    Rocky0429
  • 中间件的解析漏洞详解及演示

    Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 sec.php.owf.rar “.owf”和”.rar”...

    行云博客
  • springboot系列学习(二十八): springsecurity自定义的登录的逻辑,也就是我们从数据库中拿用户名和密码 (五)

    之前的,在配置里面,我们也可以配置数据源,从数据库里面拿用户名和密码 这个认证配置里面,修改一下这个方法,变为数据源的就可以

    一天不写程序难受

扫码关注云+社区

领取腾讯云代金券