仓储层是为了持久化数据,数据如何保存与存储介质息息相关,跟领域不是一对一关系。
一个领域对象,可以使用关系型数据库存储,也可以使用NoSql存储,甚至可以使用文件存储。
一个领域对象,可以保存在一个表中,可以保存在的多个表中,多个领域对象可以保存在一个表中。
领域对象是为了业务操作更合理,是纯内存操作,可能需要面对对象的方式更适合;仓储是为了查询,保存更合理,是IO操作,可能面向关系更适合。两种层次不同,使用成本不同,关注点不同。领域对象不应该依赖具体仓储实现,应该依赖于仓储接口。
flower-repository
领域仓储接口,主要定义接口,一般在domain层,无任何依赖。
flower-repository-mybatis
领域仓储mybatis实现,依赖mybatis,domain层,可以使用mybatis的相关技术,无限制。
flower-repository-jpa
领域仓储jpa实现,依赖spring boot jpa,domain层,可以使用jpa的相关技术,无限制。
MyBatis和JPA怎么选
各有特点
JPA:抽象层次高,适用于面向对象编程和DDD,一套语言走天下,数据库移植性好(伪需求),增删改查很方便,复杂查询支持差,学习难度大,技术要求高,sql语句难优化
MyBatis:上手容易,学习成本低,灵活性高,面向数据库编程,依赖数据库,需要面向XML和SQL编程,需要写大量模板SQL。选型考虑
1. 成本考虑:国内环境,mybatis是主流,加上学习成本低,很容易上手和招人。JPA需要有较高的面向对象的设计和相对稳定的需求。
2. 性能考虑:小项目,随便选,那个简单,那个熟练用哪个,高并发项目需要慎重,不是JPA不适合高并发,是能掌握JPA的大神太少。* Mybatis 和 JPA 用哪个好? 优缺点 ?_FH-Admin的博客-CSDN博客_jpa和mybatis哪个好
* Mybatis与Spring Data Jpa怎么选? - 掘金 (juejin.cn)
更好的搭档
MyBatis+mybatis-mapper
增删改查直接使用,复杂查询使用mapper,即可以省去编写大量模板SQL,又可以灵活控制复杂查询,支持自定义基类方法,支持JPA,完美!!
- 不选择MyBatis-Plus(github 12.7k):MyBatis-Plus名气更大,也非常好用,功能强大,支持乐观锁,多租户等,唯一的问题就是不支持JPA注解,本项目本着最小依赖的原则,domain层不依赖其他框架,只能选择JPA注解。
- 选择MyBatis-Mapper(tk-mybatis的新作):可以自定义方法,可以轻松扩展,支持JPA,喜欢的人自然喜欢,无关优劣。JPA+Fenix
简单操作使用JPA,复杂,动态SQL使用Fenix,完美!!
- Fenix,为解决复杂动态SQL而生的Spring Data JPA扩展库
更多选择
数据库存储方案选择后很难改变,所以多仓储实现意义不大,此方案仅作为依赖隔离示例。
数据库还是有选择的余地的,目前分布式数据百花齐放,很多协议都是兼容的:
PolarDB,100%兼容MySQL 5.6/5.7/8.0,PostgreSQL 11,高度兼容Oracle
TiDB,兼容 MySQL 5.7 协议和 MySQL 生态关于分库分表方案:
Sharding-JDBC,增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架
Mycat,Java语言编写的MySQL数据库网络协议的开源中间件
实战篇-项目架构,原则和分层
实战篇-基础设施,基类与配置
实战篇-接口实现,配置和部署
实战篇-仓储技术选型
实战篇-工具类实战
网友评论