1.概念:程序员
Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了很是轻量级的对象封装,使得Java程序员能够为所欲为的使用对象编程思惟来操纵数据库。着力点对象与对象之间关系sql
2.简介:数据库
Mybatis:MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,而且更名为MyBatis 。Mybatis:着力于POJO与SQL之间的映射关系apache
Spring Data:Spring Data:是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。编程
3.开发的难度:缓存
Hibernate的开发难度要大于Mybatis、Spring Data。主要是因为Hibernate封装了完整的对象关系映射机制,以致于内部的实现比较复杂、庞大,学习周期较长。mybatis
Mybatis 主要依赖于SQL的编写与ResultMap的映射。app
Spring Data易上手,经过命名规范、注解查询简化查询操做。框架
4.查询区别:学习
简单查询:Hibernate 提供了基础的查询方法,也能够根据具体的业务编写相应的SQL;
Mybatis须要手动编写SQL语句,Spring Data 继承基础接口,可以使用内置的增删改查方法。
高级查询:Hibernate经过对象映射机制,开发者无需关心SQL的生成与结果映射,专一业务流程;Mybatis须要经过手动在XML文件中编写SQL语句以及ResultMap或者注解,Spring Data 提供了命名规范查询和注解查询更简便的编写想要的SQL。
5.数据库的扩展性:
Hibernate与数据库具体的关联都在XML中,因此HQL对具体是用什么数据库并非很关心。
Mybatis因为全部SQL都是依赖数据库书写的,因此扩展性,迁移性比较差。
Spring Data 与数据具体的关联能够经过命名规范查询、注解查询,无需关心数据库的差别,可是经过本地化SQL查询的话,就不易扩展。
6.缓存机制:
相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,均可以经过实现你本身的缓存或为其余第三方缓存方案,建立适配器来彻底覆盖缓存行为。
不一样点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,而后再在具体的表-对象映射中配置是那种缓存。
MyBatis的二级缓存配置都是在每一个具体的表-对象映射中进行详细配置,这样针对不一样的表能够自定义不一样的缓存机制。而且Mybatis能够在命名空间中共享相同的缓存配置和实例,经过Cache-ref来实现。
Spring Data 能够经过本身的缓存或者第三方缓存方案,配置知足本身业务须要的缓存行为。
6.查询方式:
Hibernate查询:
.1.HQL --->from Admin as admin where admin.name =:name 使用命名参数,仅使用与Hiberante框架
2.Criteria---->对象化查询 Criteria c = getSession().Criteria(Admin.class)
c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq("apassword", password));
3.DetachedCriteria----->动态分离查询
4.例子查询-Example.create(user).list()
5.sql查询
Query q = s.createSQLQuery("select * from user").addEntity(User.class);
6.命名查询:Query q = getSession().getNamedQuery(“getUserByID”);
Mybatis查询:
l 定义xml例如;userMapper.xml
l 定义接口userMapper 定义相关的方法 没必要编写接口的实现类
l 经过mybatis内部处理机制解析xml文件中的sql
l 调用存储过程 {call 存储过程名}
Spring Data查询:
1.命名查询,须要遵循Spring Data规范,例如findByUser、deleteById 等从右向左解析生成sql
2.注解查询:@Query(“ql语句”)
7.总结:
Hibernate 对数据库提供了较为完整的封装,封装了基本的DAO层操做,有较好的数据库移植性
Mybatis 能够进行更细致的SQL优化,查询必要的字段,可是须要维护SQL和查询结果集的映射,并且数据库的移植性较差,针对不一样的数据库编写不一样的SQL,
Spring Data JPA 极大的简化了数据库访问,能够经过命名规范、注解的方式较快的编写SQL。
ORM框架的使用须要根据具体的项目业务选择更适合的技术方案,而不能一味地为了技术而技术。