springboot篇】二十一. 基于springboot电商项目 十一 地址服务

中国加油,武汉加油!

篇幅较长,配合目录观看

案例准备

  1. 本案例基于springboot篇】二十一. 基于springboot电商项目 十 购物车模块和自定义注解校验登录状况

1. 地址服务环境搭建

1.1 shop-entity编写Address类

package com.wpj.entity;

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("t_address")
public class Address implements Serializable{

    @TableId(type = IdType.AUTO)
    private Integer id;
    private String person;
    private String phone;
    private String address;
    @TableField(value = "is_def")
    private Integer isDef;
    @TableField(value = "user_id")
    private Integer uid;
}

1.2 shop-mapper编写mapper接口

package com.wpj.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.wpj.entity.Address;

public interface IAddressMapper extends BaseMapper<Address> {
}

1.3 shop-service-api编写Service接口

package com.wpj.service;

import com.wpj.entity.Address;

public interface IAddressService extends IBaseService<Address> {
}

1.4 shop-service-iml新建address-service(module-springboot)

1.4.1 address-service导包

<dependency>
    <groupId>com.wpj</groupId>
    <artifactId>shop-service-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.wpj</groupId>
    <artifactId>shop-mapper</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.wpj</groupId>
    <artifactId>shop-common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.8</version>
</dependency>

1.4.2 编写ServiceImpl

package com.wpj.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.wpj.entity.Address;
import com.wpj.mapper.IAddressMapper;
import com.wpj.service.IAddressService;
import org.springframework.beans.factory.annotation.Autowired;

@Service
public class AddressServiceImpl extends BaseServiceImpl<Address> implements IAddressService {

    @Autowired
    private IAddressMapper addressMapper;

    @Override
    public BaseMapper<Address> getMapper() {
        return addressMapper;
    }
}

1.4.3 配置yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/nz1904-springboot-shop
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
dubbo:
  application:
    name: address-service
  registry:
    address: zookeeper:192.168.59.100:2181
  protocol:
    port: -1
mybatis-plus:
  type-aliases-package: com.wpj.entity
  mapper-locations: classpath:/mapper/*.xml

1.4.4 修改程序入口

package com.wpj;

import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@DubboComponentScan(basePackages = "com.wpj.service")
@MapperScan(basePackages = "com.wpj.mapper")
public class AddressServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(AddressServiceApplication.class, args);
    }
}

1.5 shop-web新建shop-order(module-springboot)

1.5.1 shop-order导包

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.wpj</groupId>
    <artifactId>shop-service-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.wpj</groupId>
    <artifactId>shop-common</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

1.5.2 配置yml

server:
  port: 8086
spring:
  thymeleaf:
    cache: false
    prefix: classpath:/templates/
  redis:
    host: 192.168.59.100
    password: admin
dubbo:
  application:
    name: shop-order
  registry:
    address: zookeeper://192.168.59.100:2181
  consumer:
    check:  false
    retries: 3

1.5.3 修改程序入口

package com.wpj;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class ShopOrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ShopOrderApplication.class, args);
    }
}

1.5.4 启动AddressService并测试

package com.wpj;

import com.alibaba.dubbo.config.annotation.Reference;
import com.wpj.entity.Address;
import com.wpj.service.IAddressService;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.List;

@SpringBootTest
@RunWith(SpringRunner.class)
class ShopOrderApplicationTests {

    @Reference
    private IAddressService addressService;

    @Test
    public void contextLoads() {
        List<Address> list = addressService.getList();
        for (Address address : list) {
            System.out.println(address);
        }
    }
}

在这里插入图片描述

2. 地址服务模块-确认订单页面

2.1 service-api定义方法

package com.wpj.service;

import com.wpj.entity.Address;

import java.util.List;

public interface IAddressService extends IBaseService<Address> {

    List<Address> getAddressListByUid(Integer id);
}

2.2 address-service重写方法

@Override
public List<Address> getAddressListByUid(Integer id) {
    EntityWrapper wrapper = new EntityWrapper();
    wrapper.eq("user_id", id);
    return addressMapper.selectList(wrapper);
}

2.3 shop-order编写Controller

package com.wpj.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.wpj.common.aop.IsLogin;
import com.wpj.entity.Address;
import com.wpj.entity.Cart;
import com.wpj.entity.User;
import com.wpj.service.IAddressService;
import com.wpj.service.ICartService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

import java.math.BigDecimal;
import java.util.List;

@Controller
@RequestMapping(value = "/order")
public class OrderController {

    @Reference
    private IAddressService addressService;
    @Reference
    private ICartService cartService;

    @RequestMapping(value = "/toAffirmOrder")
    @IsLogin(mustUser = true)
    public String toAffirmOrder(User user, ModelMap map){
        // 根据用户id查询地址
        List<Address> addressList = addressService.getAddressListByUid(user.getId());
        // 进来的话就已经登录了所有无需校验token
        List<Cart> cartList = cartService.getUserCartList(user, null);

        BigDecimal totalPrice = new BigDecimal(0);
        for(Cart cart:cartList){
            totalPrice= totalPrice.add(cart.getSubTotal());
        }
        // 数据存到ModelMap中
        map.put("addressList",addressList);
        map.put("cartList",cartList);
        map.put("totalPrice",totalPrice);
        return "affirmOrder";
    }
}

2.4 导入静态资源和编写页面

2.5 开启包扫描

package com.wpj;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

@SpringBootApplication(scanBasePackages = "com.wpj",exclude = DataSourceAutoConfiguration.class)
public class ShopOrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ShopOrderApplication.class, args);
    }
}

2.6 启动程序入口测试

在这里插入图片描述

3. 地址服务模块-添加新地址

3.1 address-service重写insert方法

@Override
public int insert(Address address) {
    return addressMapper.addAdderss(address);
}

3.2 shop-mapper的Mapper接口定义方法

package com.wpj.mapper;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.wpj.entity.Address;

public interface IAddressMapper extends BaseMapper<Address> {
    int addAddress(Address address);
}

3.3 定义mapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wpj.mapper.IAddressMapper">
	<insert id="addAddress" statementType="CALLABLE">
			{
				call add_address(#{person},#{phone},#{address},#{isDef},#{uid})
			}
	</insert>
</mapper>

3.4 数据库定义存储过程

在这里插入图片描述

3.5 shop-order编写Controller

package com.wpj.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.wpj.common.aop.IsLogin;
import com.wpj.entity.Address;
import com.wpj.entity.User;
import com.wpj.service.IAddressService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value = "/address")
public class AddressController {

    @Reference
    private IAddressService addressService;

    @RequestMapping(value = "/addAddress")
    @IsLogin(mustUser = true)
    @ResponseBody // 储存过程
    public String addAddress(Address address, User user){
        address.setUid(user.getId());
        addressService.insert(address);
        return "ok";
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于SpringBoot+SpringMVC,+Mybatis的电商秒杀购物项目源码.zip # 秒杀商城系统设计 ## 1. 产品概述 秒杀是伴随着电子商务流行以来就有的一种营销模式,直白理解就是卖家以限定数量,或者限定时间,以极低的价格吸引大量的消费者关注,带动店铺整体发展的一种营销手法。由于商品价格低廉,往往一上架就被抢购一空,有时甚至只用几秒钟。 我完整地设计并实现了秒杀商城原型系统,包含三大部分:秒杀商城、商城管理系统和高并发秒杀业务。 ##### 1.1 **秒杀商城** 秒杀商城是是本项目的主要部分,实现了完整的业务流程,包括用户登录、用户注册、商品列表、商品详情浏览、购物车、查看订单、用户下单、秒杀业务等功能。这些功能会在报告的最后展示。 ##### 1.2 **管理系统** 考虑到系统设计的完整性,除了普通用户之外,还应有系统管理员,这里因为我们是B2C的业务,其B可以认为是使用管理系统的人。其管理系统包含了管理员注册、管理员登录、创建商品、商品管理(上架或下架)、用户管理(禁用或解禁)、订单管理(是否执行订单)。这些功能会在报告的最后展示。 ##### 1.3 **高并发秒杀业务** 通过对网络吞吐量(TPS)进行直观的表现服务器对于并发量得性能提升,使用Redis技术、多级Cache缓存技术等技术对后端进行了优化,使得服务器并发处理的性能得到了几倍得性能提升。
### 回答1: FISCO BCOS是一款区块链开发平台,通过使用该平台可以快速构建出区块链应用。在FISCO BCOS平台上,基于SpringBoot和Vue框架实现电商项目的前后端分离开发,具有以下特点。 首先,前后端分离可以将系统的业务逻辑和展示效果分别进行开发,使得开发工作更加高效。前端使用Vue框架实现页面效果,后端使用SpringBoot实现业务逻辑,两端通过API接口来进行数据交互。 其次,采用区块链技术来实现电商项目的数据存储和交易,可以避免信息篡改和数据伪造等安全问题,提高了交易的安全性和可信度。 在FISCO BCOS平台上,开发者可以借助已有的API接口和模板文件来快速搭建出一个区块链电商平台。同时,平台还提供了监控、调试等功能,可以在运行过程实时监控系统的运行情况,发现问题及时进行修复。 总之,FISCO BCOS平台结合SpringBoot和Vue框架,实现了电商项目的前后端分离开发,基于区块链技术实现了数据安全和交易可信,同时提供了丰富的监控、调试等功能,具有较高的开发效率和系统安全性。 ### 回答2: FISCO BCOS SpringBoot Vue前端分离电商项目是一款基于区块链技术的电商平台。该项目利用FISCO BCOS区块链平台构建,采用SpringBoot作为后端框架,Vue作为前端框架进行开发。 该项目的主要特点是前后端分离,有利于代码的模块化和协同开发,并且基于区块链技术,实现了电商交易的可追溯、不可篡改等优点。在前端方面,通过Vue框架实现了页面的动态渲染、组件化设计和可重用性。在后端方面,SpringBoot框架实现了RESTful API接口的设计和实现,实现了用户管理、商品管理、订单管理等功能。 该项目由于采用了区块链技术,可以实现交易的安全性和可信度,保障了消费者的利益。在商户方面,通过搭建自己的店铺,在平台上销售自己的产品,增强了商家的宣传和销售能力。同时,平台提供了丰富的数据分析以及销售分析工具,帮助商家分析销售情况和流量,促进商家的发展和壮大。 总体来说,该项目在电商市场上具有重要的意义,可以帮助消费者和商家建立更加安全、可信、高效的交易环境。同时,借助区块链技术的不可篡改性和数据追溯性,也提升了电商平台在市场上的竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值