MyBatis与JPA的区别是什么
MyBatis分为全注解版和xml版;全注解版适合于⼩项⽬,直接在⽅法上加注解,在注解中写sql
仓储
Repository 模式是领域驱动设计中另⼀个经典的模式。在早期,我们常常将数据访问层命名为:DAO,⽽在 SpringData JPA 中,其称之为Repository(仓储),这也不是巧合,⽽是设计者有意为之。
熟悉 SpringData JPA 的朋友都知道当⼀个接⼝继承 JpaRepository 接⼝之后便⾃动具备了⼀系列常⽤的数据操作⽅法,findAll, findOne ,save等。
那么仓储和DAO到底有什么区别呢?这就要提到⼀些遗留问题,以及⼀些软件设计⽅⾯的因素。在这次SpringForAll 的议题中我能够预想到有很多会强调 SpringData JPA 具有⽅便可扩展的 API,像下⾯这样
public interface OrderRepository extends JpaRepository<Order, String>{
findByOrderNoAndXxxx(String orderNo,Xxx xx);
@Transactional
@Modifying(clearAutomatically = true)
@Query("update t_order set order_status =?1 where id=?2")
int updateOrderStatusById(String orderStatus, String id);
}
spring是什么意思怎么念但我要强调的是,这是 SpringData JPA 的妥协,其⽀持这⼀特性,并不代表其建议使⽤。因为这并不符合领域驱动设计的理念。注意对⽐,SpringData JPA 的设计理念是将 Repository 作为数据仓库,⽽不是⼀系列数据库脚本的集合,findByOrderNoAndXxxx ⽅法可以由下⾯⼀节要提到的JpaSpecificationExecutor代替,⽽ updateOrderStatusById ⽅法则可以由 findOne + save 代替,不要觉得这变得复杂了,试想⼀下真正的业务场景,修改操作⼀般不会只涉及⼀个字段的修改, findOne + save 可以帮助你完成更加复杂业务操作,⽽不必关⼼我们该如何编写 SQL 语句,真正做到了⾯向领域开发,⽽不是⾯向数据库 SQL 开发,⾯向对象的拥趸者也必然会觉得,这更加的 OO。
Mybatis优势
MyBatis可以进⾏更为细致的SQL优化,可以减少查询字段。
MyBatis容易掌握,⽽Hibernate门槛较⾼。
Hibernate优势
Hibernate的DAO层开发⽐MyBatis简单,Mybatis需要维护SQL和结果映射。
Hibernate对对象的维护和缓存要⽐MyBatis好,对增删改查的对象的维护要⽅便。
Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
Hibernate有更好的⼆级缓存机制,可以使⽤第三⽅缓存。MyBatis本⾝提供的缓存机制不佳

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。