创易-数据层设计

       对于数据层大家都不陌生,关注过spring的同学应该也一定听说过spring data。我们来看看官方对spring data的介绍:

Spring Data 作为SpringSource的其中一个父项目, 旨在统一和简化对各类型持久化存储, 而不拘泥于是关系型数据库还是NoSQL 数据存储。

创易-数据层设计_第1张图片
Spring Data架构图

      从上图可以看出Spring Data确实是一个很好的接口集,对 数据访问这一特定领域有一个非常高的抽象。但是其内置的CrudRepository、PagingAndSortingRepository拥有的方法有限,在前面的文章也有提及,我们思考再三,希望保证Spring Data的NoSQL访问能力,也不失更多数据表操作方式,所以做了自己的一层扩展[基于Mybatis](即我们自己的DAO,类似于 spring-data-jpa)。

        【最终我们希望数据层(sql编写)工作尽量的少】

       通过我们对数据访问的场景进行分析和归纳,我们加入了几个特性:

        selector,即需要查询的字段,很多情况下,我们并不需要查询出所有字段,而对于数据库(RDB)来讲查询出所有字段对性能也有影响;

      condition(Criteria),条件查询,根据特定字段的特定值以不同的组合方式进行数据过滤;

       sorter,进行相关的字段排序;

       native sql 片段,支持完整sql,复杂的查询类sql,复杂的排序类sql;

      pagination,分页匹配实现方式,支持上面特性的分页;


       另一个很重要的方面是 DAO层的缓存设计,参考hibernate的cache实现。但是因为业务的复杂性,单一对象以主键为key的缓存,只能解决很小的一部分问题,我们还需要从业务层面出发实现更复杂的缓存策略支持。

      最终我们支持的DAO接口方法列表如下图:


创易-数据层设计_第2张图片
CRUD方法明细


      大家看过创易技术选型 文章的话,知道我们整体基于JHipster,其实数据层就是spring boot集成Mybatis,具体的技术细节,后续文章会有详细介绍。

事务问题,

你可能感兴趣的:(创易-数据层设计)