1. JPA技术选型的思考

2020-03-08  本文已影响0人  barry的异想世界

在做技术选型的时候是选JPA还是MyBatis,网上做对比的讨论非常多,双方也是各自有各自的好,谁也不能代替谁。以下是网上讨论的几点归纳:

  1. JPA更适配OO
  2. JPA熟悉后用起来很方便
  3. MyBatis灵活性高
  4. MyBatis性能更好
  5. 国内使用MyBatis比JPA多

做技术选型时选择的是JPA,我对JPA比较熟,主要针对JPA来谈谈我的想法

引用至【持久层框架JPA与Mybatis该如何选型
目前java 持久层ORM框架应用最广泛的就是JPA和Mybatis。JPA只是一个ORM框架的规范, 对该规范的实现比较完整就是Spring Data JPA(底层基于Hibernate实现),是基于Spring的数据持久层框架,也就是说它只能用在Spring环境内。Mybatis也是一个优秀的数据持久层框架,能比较好的支持ORM实体关系映射、动态SQL等。

1. JPA设计理念

从设计理念讲,JPA是带有面向对象的思想的,不是简单的CRUD操作。体现在所操作的参数可以是对象,如:

实体对象中包含子对象

@Entity
public class SaleOrder  {
    private Integer orderId;
    private String orderCode;
    private Address address;
    private List<OrderDetail> orderDetailList;
}

保存可包含子对象

orderRepository.save(saleOrder);

可将主对象和子对象一并操作保存

查询能包含子对象

@Repository
public interface OrderRepository extends JpaRepository<SaleOrder, Integer> {
    SaleOrder findByAddress(Address address);
}

2. Repository仓库接口

3. 头痛的查询问题

性能: JPA在使用不当的情况下的确会有一些性能问题,尤其在使用了一对多,多对多关系的情况下,会增加了过多的子查询。我认为少量的子查询在业务处理上是可以接受的并且在性能开销上是可以容忍的。另外为提高性能也可以使用懒加载或部分字段查询的方式,减少过去无用字段和子查询开销。

灵活性: 在不手写SQL的情况下的确失去部分灵活性,尤其是在多表关联查询的情况下,虽然有一些办法可以解决,但终归还是没有MyBatis灵活。在单表查询上JPA还能有较好的表现,而复杂查询可尽量从设计上回避。

4. 架构设计的思考

业务系统尽量回避跨领域对象操作,从需求上回避,从设计上规避,从技术上分离。微服务从顶层设计上切分业务之间的相互作用,领域驱动设计从实现层面对对象进行聚合与分离,CQRS从技术层面分离。

上一篇下一篇

猜你喜欢

热点阅读