Repository、dao、jpa、jdbc

Repository

定义有点抽象,实际上资源库类似DAO,但它抽象程度更高,位于DAO之上的更高一层,更接近于业务层

资源库位于领域模型和数据映射层之间,就像一个位于内存的领域对象集合,提供一种管理领域对象的机制

资源库工作流程:业务层使用(近乎)自然语言构建查询条件提交给资源库,资源库执行对象增删等操作(就像操作集合一样),最后资源库自动将操作转为SQL的CRUD并执行。

资源库可以使用DAO执行数据查询,将返回结果转为领域对象,或新建领域对象,资源库执行新增操作,它自动转为DAO新增方法实现数据持久化。

资源库是领域驱动设计的概念,尤其适合于存在大量复杂领域对象的场景。

示例:

 

 

DAO

DAO是Data Access Object的缩写,是一种结构型设计模式,用于分离业务层(应用)和持久化层(数据库)

DAO模式是一种分层的思想,这层就是用于处理和数据库交互(CRUD),而业务层不需要知道DAO层的实现细节。

DAO模式可以理解为数据库操作的简单封装,仅此而已。

对比

៲  DAO抽象数据持久化,资源库抽象领域对象集合;

៲  DAO是底层概念,更接近数据库,资源库是高层概念,更接近领域对象(业务逻辑);

៲  DAO简单、通用,可以简单理解为CRUD的封装,操作对象是SQL语句,资源库复杂、抽象,可以理解为对领域模型的封装,操作对象是领域对象,不再关心数据库;

៲  DAO旨在隐藏数据库操作的复杂性,例如数据库连接和构造SQL语句,使CRUD更加简单,资源库旨在隐藏领域对象操作的复杂性,使领域业务逻辑更加清晰;

៲  DAO不能使用资源库,但资源库可以使用DAO,可以简单认为:资源库 = DAO + 领域对象;

非常具体详细的Repository使用:

戏说领域驱动设计(廿四)——资源库 - SKevin - 博客园

1. JDBC和JPA的区别

  • 不同标准:jdbc是数据库的统一接口标准;jpa是orm框架的统一接口标准。
  • 用法区别:jdbc更注重数据库,orm则更注重于java代码,但是实际上jpa实现的框架底层还是用jdbc去和数据库打交道。

2. JDBC(Java DataBase Connectivity)

是java连接数据库操作的原生接口。JDBC对Java程序员而言是API,为数据库访问提供标准的接口。由各个数据库厂商及第三方中间件厂商依照JDBC规范为数据库的连接提供的标准方法。

  • 优点:运行速度最快,所有操作数据库的技术底层都是jdbc写的
  • 缺点:重复代码多,耦合性高,开发效率低,更换数据库比较繁琐

3. ORM(Object-Relational Mapping)

对象关系映射。简单的说:ORM就是建立实体类和数据库表之间的关系,从而达到操作实体类就相当于操作数据库表的目的。
优点:减少重复性代码。

常见的orm框架有:
Hibernate、spring data jpa、open jpa

Hibernate
Hibernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以使用面向对象的思维来操纵数据库。是一种JPA实现。

4. JPA(Java Persistence API)

Java对象持久化的 API。是SUN公司推出的一套基于ORM的规范,通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现。JPA是为了让面向对象设置的,为了不写sql语句而设置的。
优点:数据库移植快,一级二级缓存,查询,提高性能(ehcache框架实现缓存)
缺点:查询所有的时候,find性能无法控制,无法干预sql语句的生成,对sql语句要求高的话

5. 多个数据访问框架区别

Hibernate:是JPA的一种实现,是一个框架
Spring Data JPA:对JPA规范的再次抽象,底层使用Hibernate实现
Spring Data JDBC: jdbcTemplate模板数据库简化对数据库的操作,相比传统JDBC而言省去了,数据库驱动,连接等无关配置,只需要写sql,设置参数
Mybatis:是一个持久化框架,但不完全是一个orm框架,不是依照的jpa规范,她需要些sql语句,半ORM。

下图说明上面介绍的名词之间相互关系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值