Java电商项目-1.构建数据库,搭建项目环境
目录
到Github获取源码请点击此处
一. 数据库还原
- 新建Mysql数据库, 你可以使用自己熟悉的Mysql图形界面操作工具快速建库.
- 在新创建的ashop数据库中执行脚本文件
ashop.sql
. 该脚本存放在创建数据库的sql脚本
目录下.
- 成功导入后, 数据库将拥有11张表
二. Mybatis逆向生成工具的使用
- 接下来我们通过Mybatis逆向生成工具根据数据库表生成对应的pojo类和与Mybatis有关的文件.
- 首先在IDE中导入
Mybatis逆向生成工具/MybatisGenerator
项目, 修改generatorConfig.xml
文件中连接数据库的信息.
- 设置好后运行
GeneratorSqlmap
- 运行结束后我们会在
mapper
与pojo
包下获得逆向生成的与数据库有关的数据. - 我们先保留着这些文件, 在下面项目环境搭建的过程中将会拷贝这些文件. 有了逆向生成工具就不用手动生成这些数据了.
三. 搭建项目环境
- 项目的Maven结构如下:
- 在idea中先创建
ashop
Maven项目, 然后依次按层级创建好各个模块. 最后的结果如下图:
- 创建好Maven项目后需要为各个子模块添加依赖, 具体的依赖放在
项目中各个模块的pom依赖
目录下. - 接下来在
ashop-rpc-service-impl
模块的src/main/resource
目录下添加配置文件, 所有配置文件均放在resource(配置文件)
目录下.
- 接下来, 把之前用逆向生成工具生成的
pojo
类放到pojo
模块中(在java目录下创建com.ashop.pojo包
), 并把逆向工程生成的mapper
包下的mapper文件放到mapper模块中, 注意.java
和.xml
文件是要分开放的,.java
放在源码位置,.xml
放在resource
资源目录下 - 我项目做到这里的时候遇到了错误, Mapper文件报错, 原因是编译打包后mapper接口文件和.xml文件不在同一个包内. 原因是我在resources目录下建包的时候建错了...
- 至此为止项目的框架搭建完成.
四. 在linux虚拟机上部署zookeeper, 搭建Dubbo服务.
- 先新建一台linux虚拟机, 然后使用类似Xshell等工具将jdk和zookeeper的安装包上传到虚拟机中.
linux虚拟机安装JDK
- 下面是JDK的安装过程:
- 首先你需要把linux版本的JDK上传到虚拟机上.
- 创建java安装目录:
mkdir /usr/local/jdk
- 解压JDK压缩包:
tar zxvf 跟上JDK压缩包名
- 拷贝解压后的JDK到安装目录中:
cp -rf 解压JDK文件名 /usr/local/jdk/
- 配置环境变量: 打开编辑器
vi /etc/profile
, 追加以下内容
- 退出编辑器, 输入指令让环境变量生效:
source /etc/profile
- 最后输入
java
或javac
等指令检查是否配置成功.
安装zookeeper
- 首先把zookeeper的压缩包上传到linux虚拟机上
- 创建存放zookeeper的目录:
mkdir /usr/local/zookeeper
- 解压上传到虚拟机的zookeeper压缩包:
tar zxvf 压缩包名
- (演示拷贝)拷贝解压文件到安装目录:
cp -rf 解压文件名 /usr/local/zookeeper/zk1
- 进入
zk1
目录, 在当前目录下创建data目录:mkdir data
- 进入
data
目录, 并创建myid文件, 并在文件中输入1(作为第一个zookeeper的唯一标识):vi myid
, 输入1后保存退出
- 回到zk1目录, 进入conf目录, 拷贝默认配置文件:
cp zoo_sample.cfg zoo.cfg
. - 修改新的配置文件, 主要修改三个地方: 1. dataDir 2. client 3. 集群信息
- 配置完后继续拷贝2份zookeeper到
/usr/local/zookeeper
目录中, 我们要搭建集群, 三份zookeeper分别命名为zk1, zk2, zk3
- 注意zk2和zk3同样对配置文件要进行配置.
- 其中zk2的端口号配置为2182, zk3的端口号配置为2183, 除此之外配置文件最下面的集群部署三个配置文件都保持一致.
- 接着, 关闭防火墙:
service iptables stop
- 启动3个zookeeper服务:
./zk1/bin/zkServer.sh start
, 还要启动zk2和zk3... - 查看某个zookeeper的状态:
./zk1/bin/zkServer.sh status
- 连接zookeeper集群查看信息:
./zk1/bin/zkCli.sh
- 查看某个节点的信息:
ls /路径
- 查看某个节点保存的具体内容:
get /路径
- 提示: 你可以设置防火墙开放2181, 2182, 2183三个端口, 这样就不需要每次去手动关闭防火墙了.
五. 搭建ashop-manager-web项目
ashop-manager-web
模块的作用相当于普通BS项目中的后台. 只不过ashop-manager-web
通过调用远程方法完成对数据库的操作. 这就是SOA架构中面向服务的思想.- 首先在ashop项目下创建模块ashop-manager-web, 打包模式选择war包
- 给后端管理系统添加依赖, 首先需要依赖
service
模块, 然后导入相关的依赖, 依赖样本在后台管理系统的配置文件
目录中. - 在模块的
src/main/resource
目录下, 完成spring配置文件的配置. - 首先需要给出
applicationContext-service.xml
配置文件. - 然后是
applicationContext-dubbo.xml
配置文件 - 最后创建
springmvc.xml
配置文件 - 拷贝提供的静态资源到
ashop-manager-web
模块中. (拷贝到webapp中)
- 接下来在后端管理系统的java目录下创建
com.ashop.manager.controller
包, 并创建PageController
类, 在类中编写代码完成页面跳转以及管理后台首页的加载.
- 然后对
ashop
总项目进行install, 你可能会在install时遇到一些小错误, 静下心根据错误提示修改即可. - install完后到
ashop-manager-web
项目中, 使用tomcat7插件进行发布. (Maven命令-Tomcat7:run)
- 启动完毕后我们到浏览器的地址栏中输入
http://localhost:8080
, 即可进入商城的后台管理页面
- 到此为止, 环境搭建暂时告一段落. 下面补充数据库表的介绍
六. 数据库表分析
- 内容分类表:tb_content_category
列名 | 类型 | 含义 |
---|---|---|
id | bigint(20) | 内容分类 |
parent_id | bigint(20) | 父类目 ID=0 时,代表的是一级的类目 |
name | varchar(50) | 分类名称 |
status | int(1) | 状态:可选值:1(正常),2(删除) |
sort_order | int(4) | 排列序号,表示同级类目的展现次序,如数值相等 则按名称次序排列。取值范围:大于零的整数 |
is_parent | tinyint(1) | 该类目是否为父类目,1 为 true,0 为 false |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
- 内容表: 内容表:tb_content
列名 | 类型 | 含义 |
---|---|---|
id | bigint(20) | 主键 |
category_id | bigint(20) | 内容分类 ID |
title | varchar(200) | 内容标题 |
sub_title | varchar(100) | 子标题 |
title_desc | varchar(500) | 标题描述 |
url | varchar(500) | 链接 |
pic | varchar(300) | 图片绝对路径 |
pic2 | varchar(300) | 图片 2 |
content | text | 内容 |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
- 1.3 商品表:tb_item
列名 | 类型 | 含义 |
---|---|---|
id | bigint(20) | 商品 id,同时也是商品编号 |
title | varchar(100) | 商品标题 |
sell_point | varchar(500) | 商品卖点 |
price | bigint(20) | 商品价格,单位为:分 |
num | int(10) | 库存数量 |
barcode | varchar(30) | 商品条形码 |
image | varchar(500) | 商品图片,以逗号分隔的多个图片的 url 地址字符 串 |
cid | bigint(10) | 所属类目,叶子类目 |
status | tinyint(4) | 商品状态,1-正常,2-下架,3-删除 |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
- 1.4 商品分类表:tb_item_cat
列名 | 类型 | 含义 |
---|---|---|
id | bigint(20) | 商品分类 ID |
parent_id | bigint(20) | 父类目 ID=0 时,代表的是一级的类目 |
name | varchar(50) | 类目名称 |
status | int(1) | 状态。可选值:1(正常),2(删除) |
sort_order | int(4) | 排列序号,表示同级类目的展现次序,如数值相等 则按名称次序排列。取值范围:大于零的整数 |
is_parent | tinyint(1) | 该类目是否为父类目,1 为 true,0 为 false |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
- 商品描述表:tb_item_desc
列名 | 类型 | 含义 |
---|---|---|
item_id | bigint(20) | 商品 ID |
item_desc | text | 商品描述 |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
- 商品规格参数模板表:tb_item_param
列名 | 类型 | 含义 |
---|---|---|
id | bigint(20) 主键 | |
item_cat_id | bigint(20) | 商品分类 ID |
param_data | text | 规格参数模板信息 |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
- 商品规格参数信息表:tb_item_param_item
列名 | 类型 | 含义 |
---|---|---|
id | bigint(20) | 主键 |
item_id | bigint(20) | 商品 ID |
param_data | text | 规格参数信息 |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
- 订单表:tb_order
列名 | 类型 | 含义 |
---|---|---|
order_id | varchar(50) | 订单 id |
payment | varchar(50) | 实付金额。精确到 2 位小数;单位:元。如:200.07, 表示:200 元 7 分 |
payment_type | int(2) | 支付类型,1、在线支付,2、货到付款 |
post_fee | varchar(50) | 邮费。精确到2 位小数;单位:元。如:200.07,表示:200 元 7 分 |
status | int(10) | 状态:1、未付款,2、已付款,3、未发货,4、已 发货,5、交易成功,6、交易关闭 |
create_time | datetime | 订单创建时间 |
update_time | datetime | 订单更新时间 |
payment_time | datetime | 付款时间 |
consign_time | datetime | 发货时间 |
end_time | datetime | 交易完成时间 |
close_time | datetime | 交易关闭时间 |
shipping_name | varchar(20) | 物流名称 |
shipping_code | varchar(20) | 物流单号 |
user_id | bigint(20) | 用户 id |
buyer_message | varchar(100) | 买家留言 |
buyer_nick | varchar(50) | 买家昵称 |
buyer_rate | int(2) | 买家是否已经评价 |
- tb_order_item
列名 | 类型 | 含义 |
---|---|---|
id | varchar(20) | 主键 |
item_id | varchar(50) | 商品 id |
order_id | varchar(50) | 订单 id |
num | int(10) | 商品购买数量 |
title | varchar(200) | 商品标题 |
price | bigint(50) | 商品单价 |
total_fee | bigint(50) | 商品总金额 |
pic_path | varchar(200) | 商品图片地址 |
- 物流表:tb_order_shipping
列名 | 类型 | 含义 |
---|---|---|
order_id | varchar(50) | 订单 ID |
receiver_name | varchar(20) | 收货人全名 |
receiver_phone | varchar(20) | 固定电话 |
receiver_mobile | varchar(30) | 移动电话 |
receiver_state | varchar(10) | 省份 |
receiver_city | varchar(10) | 城市 |
receiver_district | varchar(20) | 区/县 |
receiver_address | varchar(200) | 收货地址,如:xx 路 xx 号 |
receiver_zip | varchar(6) | 邮政编码,如:310001 |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
- 用户表:tb_user
列名 | 类型 | 含义 |
---|---|---|
id | bigint(20) | 用户表主键 |
username | varchar(50) | 用户名 |
password | varchar(32) | 密码,加密存储 |
phone | varchar(20) | 注册手机号 |
varchar(50) | 注册邮箱 | |
created | datetime | 创建时间 |
updated | datetime | 更新时间 |
Java电商项目-1.构建数据库,搭建项目环境的更多相关文章
- 项目二:企业级java电商网站开发(服务端)
声明:项目源于网络,支持正版教程,学习使用,仅记录在此 项目介绍 企业级java电商网站开发(服务端),模块划分:用户管理,商品管理,商品品类管理,订单管理,订单详情管理,购物车管理,收货地址管理,支 ...
- Java电商支付系统手把手实现(二) - 数据库表设计的最佳实践
1 数据库设计 1.1 表关系梳理 仔细思考业务关系,得到如下表关系图 1.2 用户表结构 1.3 分类表结构 id=0为根节点,分类其实是树状结构 1.4 商品表结构 注意价格字段的类型为 deci ...
- Java电商支付系统实战(一)- 简介
现如今,支付成为热点 对于电商业务,这都是不可或缺的 核心功能剖析 下单->支付 nginx 将用户请求反向代理到我们编写的电商系统 = 下单 之后,点击支付跳转到支付系统,最后对接 通过跳转将 ...
- 开源 java 电商系统
shop++是基于spring.springmvc等主流框架开发,参考资料比较全面,上手容易: 比 javashop 代码可读性好. 适合二次开发 6.broadleaf基于spring.Spring ...
- Web项目--------原Oracle数据库的项目同时兼容MySql
原Oracle数据库的项目同时兼容MySql步骤: (一)修改资源配置文件applicationContext-dataSource.xml的数据库连接 Oracle数据库中加上from dual的原 ...
- create-react-app 基于ts项目,使用react-router-dom搭建项目
准备工作 来个react项目 create-react-app 基于TS的项目 ts项目安装后 删除node_modules,重新 yarn install, 不然jsx会报错 安装React-rou ...
- Java电商项目-6.实现门户首页数据展示_Redis数据缓存
目录 项目的Github地址 需求介绍 搭建Redis集群环境 下面先描述单机版redis的安装 下面将进行Redis3主3从集群环境搭建 基于SOA架构, 创建门户ashop-portal-web门 ...
- Java电商项目-3.使用VSFTPD_Nginx完成商品新增
目录 到Github获取源码请点击此处 一. 商品类目查询 二. FTP图片服务器的搭建 图片上传思路介绍 Linux中安装vsftpd 接着配置ftp服务, 让外网可以访问 Http服务器搭建 Ng ...
- Java电商项目-8.实现SSO单点登陆
目录 创建ashop-sso-web单点登陆系统 用户名唯一性验证 用户注册 用户登陆 获得用户登陆状态 实现安全退出 项目的Github地址 创建ashop-sso-web单点登陆系统 先创建好模块 ...
随机推荐
- MyBatis核心对象之StatementHandler
MyBatis核心对象之StatementHandler StatementHandler ResultHandler ParameterHandler Executor org.apache.iba ...
- windows下cocos2d-x工程结构讲解
这是我们新建好的工程,稍微解释一下我们开发windows的cocos应用所用到的几个文件夹的作用 Classes文件夹,存放游戏代码中的类的源码,当然我们放在别的地方也可以,只要配置好依赖关系就行了 ...
- PlayJava Day018
今日所学: /* 2019.08.19开始学习,此为补档. */ File 文件或目录的抽象表示 public File(String parent , String child) 传入父目录地址,传 ...
- javaWeb技术第一篇之HTML
<!-- 当前是最简的html --> <html> <!-- 告诉浏览器当前是一个html文档 最外面的标签. --> <head> <!--h ...
- QT解决中文乱码
如果编译器在支持C++11的情况下,我们可以使用u8"XXXX" 如:QString str = u8"我是中文"; 这样就解决了中文乱码的问题,使用UTF-8 ...
- 团队项目之需求改进&系统设计
小组:BLACK PANDA 需求&原型改进 20分 需求&原型改进: https://git.lug.ustc.edu.cn/black-panda/mblogs_plan/bl ...
- iTerm2 使用代理
0x00 事件 因为 brew 安装极慢,所以需要 iTerm2 设置代理解决速度问题. 0x01 解决 代理软件开启本地 Http 端口: iTerm 设置代理: $ vim ~/.zshrc # ...
- SQL Server 通过游标重新定义单据数据的单据编号
DECLARE @Index INTSET @Index=100DECLARE UpdateCursor CURSOR FOR (SELECT DISTINCT AA.Id FROM dbo.表 ...
- 解决Flask和Django的错误“TypeError: 'bool' object is not callable”
跟着欢迎进入Flask大型教程项目!的教程学习Flask,到了重构用户模型的时候,运行脚本后报错: TypeError: 'bool' object is not callable 这是用户模型: c ...
- android 完全区分double-tap 与 singal-tap 的方法
需求:viewpager显示图片,需要在双击时对图片进行缩放,单击时在屏幕下方弹出popwindow,由于android的双击本质就是两次单击,但是又不想在双击时触发单击时的动作,所以就在网上各种搜解 ...