前情提要: 之前已经完成了用户模块、账户模块、账本模块, 本次需要完成的账单模块算是整个账本的最后一块拼图.
贴上之前画好的数据库关系图:
完成了对应的User、Book、Account, 假定本次完成了Bill.
那么账本的核心使用逻辑就算是初步打通了:
用户创建账本/账户, 在某一个账本中创建对应的账单, 同时这个账单可以同时绑定所存在的账本和账户(账户可以为NULL).
对于Bill数据类:
id: 账单的id. 作为主键.type: 账单的类型, 如"饮食","日用品"等, 可以由前端进行相应的指定balance: 账单的金额, 与图片中稍有出入, 数据库中设置的是两位小数.accountId: 账单所绑定的账户IDbookId: 账单所绑定的账本IDtags: 账单的标签, 如在type为"饮食"时, 就可以指定tags为"早餐 食堂", 通过空格进行多个tag的分隔.createTime: 账单创建的时间. 目前默认使用SQL中的now()进行指定. 但是考虑到可能会漏记之后补充账单, 可以通过创建账单时传入createTime属性进行指定.io: 收支类型, 根据形似程度, 使用1作为收入(in), 使用0作为支出(out)
在确定了数据类之后. 就是简单的增删改查SQL语句的注入. 也就是BillDao的编写.
@Mapper
public interface BillDao {
Integer saveBill(@Param("bill") Bill bill);
Integer deleteBillById(@Param("id") Long id);
Integer updateBillById(@Param("bill") Bill bill);
Bill getBillById(@Param("id") Long id);
List<Bill> getBillsByBookId(@Param("bookId") Long bookId);
List<Bill> getBillsByAccountId(@Param("accountId") Long accountId);
}
由于账单模块作为整个账本中算是最基本的一个模块. 因此可以通过多种方式进行账单查询.
例如此处的getBillsByBookId以及getBillsByAccountId.通过账户以及账本的ID对账单进行一个集合的查询返回.
那可能就注意到为什么没有通过用户的ID进行查询.
因为在数据库中, 账单只绑定了对应的账户与账本的ID, 而如果需要查询用户的所有账单, 则需要通过整合用户的所有账本/账户中的账单进行返回. 那就不应该在账单模块进行处理了(我是这么觉得的).
因此. 不能够越过账本与账户的数据, 直接使用用户ID进行相应账单的查询返回.
相应的mapper与之后的service与controller.
与之前的模块别无二致. 也就不再赘述了.
至此. 账本的四个主要模块就算是完成了. User、Account、Book、Bill.
之后便是对几个模块进行分布式的整合. 算是练习一下对应的框架.
欢迎各位来对我的小项目提出各种宝贵的意见, 这对我的进步非常重要, 谢谢大家.
GitHub地址: Bngel/bngelbook