数据库设计
分为如下几个模块:
- tb_area:存储地址,主键为area_id
- tb_head_line:存储首页轮播图,主键为line_id
- tb_person_info:存储用户信息,主键为user_id
-
tb_product:存储商品信息,主键为product_id,表结构如下所示:
tb_productbiaojieg
这张表中外键的信息是这样的:
CONSTRAINT
fk_product_procate
FOREIGN KEY (product_category_id
) REFERENCEStb_product_category
(product_category_id
),
CONSTRAINTfk_product_shop
FOREIGN KEY (shop_id
) REFERENCEStb_shop
(shop_id
)
分别表明这个商品属于哪个商品类别以及属于哪个店铺下面。
- tb_product_category:商品种类信息,主键为product_category_id,表结构如下: tb_product_category表结构
-
tb_product_img:商品图片
-
tb_shop:店铺信息,表结构如下所示:
tb_shop的表结构
在创建这个表的时候有如下创建语句:
CONSTRAINT
fk_shop_area
FOREIGN KEY (area_id
) REFERENCEStb_area
(area_id
),
CONSTRAINTfk_shop_profile
FOREIGN KEY (owner_id
) REFERENCEStb_person_info
(user_id
),
CONSTRAINTfk_shop_shopcate
FOREIGN KEY (shop_category_id
) REFERENCEStb_shop_category
(shop_category_id
)
分别有三个外键与tb_area,tb_person_info,tb_shop_category中的主键相关联,那第一个问题是什么是外键呢?可以查看这篇文章:mysql中的外键 那这三个外键的作用是什么呢?在创建店铺的时候可以相应地确定店铺的地址,店铺的店铺种类(该店铺应该划分到哪一类下面),店铺的创建者(只能让创建者看到自己创建的店铺,别人创建的店铺看不到)。
-
tb_shop_category:店铺种类信息,主键为shop_category_id,表结构如下所示:
tb_shop_category的表结构
当parent_id为null时,表示店铺为一级店铺类别;当parent_id等于shop_category_id时,表明它是一级店铺类别下的二级店铺类别
项目使用到的模块
- 大的方面:店铺注册功能模块,店铺编辑模块,商品类别模块,商品模块,前端展示模块
- 小的细分模块:logback日志系统,redis缓存,kapatcha验证码,Thumbnailator图片处理,DES加密模块,数据库主从分离,数据库和图片定期备份
现在就来非常细致的剖析各个模块的作用以及各个模块使用到的知识点
logback日志模块
logback是一个开源的日志组件,logback由三个部分构成,logback-core,logback-classic,logback-access。其中logback-core是其他两个模块的基础。
logback中的三个重要概念:
- Logger:日志记录器,把它关联到对应的context上后,主要用于存放日志对象,定义日志类型,级别。
- Appender:指定日志输出的目的地,目的地可以是控制台,文件或者数据库
- Layout:负责把事件转换成字符串,格式化日志信息的输出。
logback配置优先级顺序
- logback首先在classPath中寻找logback.groovy文件
- 如果没有找到,继续寻找logback-test.xml文件
- 如果没有找到,继续寻找logback.xml文件
-
如果仍然没有找到,则使用默认配置(打印到控制台)
在本项目中首先添加maven依赖: logback的maven依赖
再配置logback.xml
redis缓存:
关于redis的一些基础知识可以看这个:redis常见面试题 关于redis的过期时间的设置看这篇文章:redis键过期策略
kapatcha验证码
首先在maven中添加kapatcha的依赖,然后在web.xml中定义kapatcha的样式。在前端添加验证码控件并引入kapatcha;在codeUtil类中对输入的验证码与实际生成的验证码进行比较。
Thumbnailator图片处理
Thumbnailator是一个生成图像缩略图的java类库。首先在pom.xml中引入依赖,在imgUtil类中使用Thumbnailator给图片加水印,生成随机的文件名并返回到指定的路径中。
DES加密模块
关于一些DES加密的知识参考这篇文章DES加密算法原理
在项目中,使用DES加密来对数据库连接时的用户名和密码进行加密。首先在DESUtil类中编写加密和解密方法,对jdbc.properties中的明文进行加密,在spring-daox.xml中需要使用到用户名,密码进行数据库连接时再进行解密。
数据库主从分离
关于数据库的主从分离看这篇文章:mysql数据库主从配置详解
数据库和图片的定期备份
数据库备份
首先创建一个文件夹保存备份文件,在linux下实现数据库的备份的指令如下:
备份指令
大意就是把o2o.sql在/root/backup/sql/目录下备份,文件名为o2o+时间戳的格式
图片文件备份
在linux下面实现文件备份的指令:
图片备份
大意是把/user/baidu/work/image/upload/下面的图片文件打成压缩包放到/root/backup/image/image目录下
接着创建一个backup.sh,把上面两条命令放入backup.sh中,执行backup.sh就可以实现数据库和图片的备份。那怎么实现定期的数据备份呢?我们使用crontab来实现数据的定期备份,cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。首先输入:
这样就能设置crontab了。然后再输入如下指令实现定期备份: 定期备份crontab -e
命令中的5个*表示备份时间精确到分钟。
网友评论