转载请注明出处:http://blog.youkuaiyun.com/anxpp/article/details/51415698,谢谢!
在一切开始之前,先举个简单的例子,以提高大家的兴致!
如果一张表user有三个字段,id、name和age,要查找指定姓氏在某年龄以上的user,在传统的Spring+Hibernate中,dao层我们是这样写的:
UserDao:
- public interface UserDao{
- List<User> findByNameLikeAndAgeGreaterThan(String firstName,Integer age);
- }
UserDaoImpl(已经是相对简单的HibernateTemplate方式了):
- public class UserDaoImpl implements UserDao{
- @Override
- public List<User> findByFirstNameAndAge(String firstName, Integer age) {
- //具体hql查找:"from User where name like '%'"+firstName + "and age > " + age;
- return hibernateTemplateMysql.execute(new HibernateCallback() {
- @Override
- public Object doInHibernate(Session session) throws HibernateException {
- String hql = "from User where name like '?' and age > ?";
- Query query = session.createQuery(hql);
- query.setParameter(0, firstName+"");
- query.setParameter(1, age);
- return query.uniqueResult();
- }
- });
- }
- }
然而,如果我们用Spring Data JPA呢:
- public interface UserDao extends JpaRepository<User, Serializable>{
- List<User> findByNameLikeAndAgeGreaterThan(String firstName,Integer age);
- }
对,就这样,已经没有了,连实现都不需要写的!service直接调用UserDao.findByNameLikeAndAgeGreaterThan(firstName+"%",age)即可。
那么,下面就来介绍,Spring Data JPA是个什么,如何为我们简化JPA开发。
推荐两篇文章:
- JPA规范介绍及实例(Java数据持久化解决方案)
- 本文重点做介绍,如果需要了解如何搭建,请参考这篇文章:手把手教你从最基本的Java工程搭建SpringMVC+SpringDataJPA+Hibernate(含源码下载)(Spring Data JPA详细搭建过程)
1、简介
官网:http://projects.spring.io/spring-data-jpa/
Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。
Spring Data 包含多个子项目:
JPA就是其中子项目之一,正如JPA规范介绍及实例中的介绍,JPA属于重量级的,因为它需要运行在JAVA EE容器中,而Spring Data JPA提供了轻量级的实现,在任何servlet容器中就可以运行。
Spring Data JPA相对于Java EE中的JPA,更加简洁易用:
- 配置更简单。
- Spring以轻量级的方式实现了部分在 EJB 容器环境下才具有的功能。
- Spring 将 EntityManager 的创建与销毁、事务管理等代码抽取出来,并由其统一管理。
- 正如前面的例子,极大的简化了数据库访问层(dao)的代码。