1.基础秒杀项目
一、整体架构
领域模型 就是专门负责某方面的业务的pojo,比如一个User,具有注册,使用,注销这样的一个生命周期。但关联到数据层可能是用户密码表、属性表等等多个数据库表。
贫血模式 就是不赋予领域模型方法,只给领域模型基本的属性和set get 方法,让其注册、注销等操作由service来完成。 相反的就是 充血模式,在领域模型中把具体操作方法全部写入。
领域模型 | 就是专门负责某方面的业务的pojo,比如一个User,具有注册,使用,注销这样的一个生命周期。 但关联到数据层可能是用户密码表、属性表等等多个数据库表。 |
贫血模式 | 就是不赋予领域模型方法,只给领域模型基本的属性和set get 方法,让其注册、注销等操作由service来完成。 相反的就是 充血模型,在领域模型中把具体操作方法全部写入。 |
二、具体模型
注意:
用户密码表,单独分出一个表。
密码应当分开存储,防止在查询用户信息时,把密码也直接查询出来,会容易被攻击和进行恶意操作
库存表也是单独表,因为库存操作很频繁,频繁给一整行添加行锁影响效率。
单独分出库存表,方便以后进行分库分表(以尾号取模)。
三、类图
四、小知识点
ex _instanceof _BusinessException
判断ex是否是BusinessException的具体实例。
不小心搞崩了服务器上的mysql,原因是硬盘空间满了…
删一删其他文件,重启mysql就好了…
Spring自动装配
@Autowired
private UserService userService;
但是UserService明明只是一个没有方法实现的接口啊,看来Spring应该可以自动找到UserServiceImp实现类吧…
ORM
Object Relational Mapping对象关系映射
通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销。
常见的ORM框架有:Hibernate(JPA的实现)、TopLink、Castor JDO、Apache OJB等。
Lambda表达式与Stream Api
/**
* itemDO:从数据库中 商品信息表 查询出来的Data Object
* itemStockDO:从数据库中 库存表 查询出来的Data Object
* itemModel:商品的业务模型,集成业务的相关DO数据
*
* 使用stream api将itemDOList,根据其内的id查询出itemStockDO,与itemStockDO一起转换成itemModel
* 最后通过.collect(Collectors.toList())转换为list对象
* @return
*/
@Override
public List<ItemModel> listItem() {
List<ItemDO> itemDOList = itemDOMapper.listItem();
List<ItemModel> itemModelList = itemDOList.stream().map(itemDO -> {
ItemStockDO itemStockDO = itemStockDOMapper.selectByItemId(itemDO.getId());
ItemModel itemModel = this.convertModelFromDataObject(itemDO,itemStockDO);
return itemModel;
}).collect(Collectors.toList());
return itemModelList;
}
Mysql中的datetime
0000-00-00 00:00:00