美文网首页
实战篇-仓储技术选型

实战篇-仓储技术选型

作者: jimmyz81 | 来源:发表于2022-04-11 11:23 被阅读0次

    仓储层是为了持久化数据,数据如何保存与存储介质息息相关,跟领域不是一对一关系。
    一个领域对象,可以使用关系型数据库存储,也可以使用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数据库网络协议的开源中间件


    SpringBoot入门系列

    实战篇-项目架构,原则和分层
    实战篇-基础设施,基类与配置
    实战篇-接口实现,配置和部署
    实战篇-仓储技术选型
    实战篇-工具类实战

    相关文章

      网友评论

          本文标题:实战篇-仓储技术选型

          本文链接:https://www.haomeiwen.com/subject/itdssrtx.html