Spring Data JPA 使用感受
2017-10-18 10:16
363 查看
Spring Data JPA是Spring Data项目中的一个子项目,该子项目依赖于另外一个基础子项目Spring Data Commons。
首先谈一下Spring Data JPA是什么,简单的说,Spring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,该框架有如下几个优点:
1、提供统一的接口,可避免我们再次重复编写基础的DAO类;
Spring Data JPA提供了几个基础的接口类,分别为CrudRepository、PagingAndSortingRepository、 Repository,其中,CrudRepository提供了基础的增删查改方法,PagingAndSortingRepository则在CrudRepository的基础上提供了对数据查询的分页支持,Repository建立在PagingAndSortingRepository的基础上,提供了完善的接口方法。
以先展示了CrudRepository提供的的接口方法:
Java代码
public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {
T save(T entity);
T findOne(ID primaryKey);
Iterable<T> findAll();
Long count();
void delete(T entity);
boolean exists(ID primaryKey);
// … more functionality omitted.
}
2、遵循JPA规范,同时也提供了灵活的数据访问方式;
Spring Data JPA能够很好的兼容目前JPA2.0规范,在定义Entity类的时候,可以在类中定义标准的@NamedQuery查询,也可以在Spring Data JPA的Repository类的方法中定义@Query查询。
标准的JPA对@NamedQuery定义如下:
Java代码
@Entity
@NamedQuery(name="Country.findAll", query="SELECT c FROM Country c")
public class Country {
...
}
Spring Data JPA对@Query定义如下:
Java代码
public interface CountryRepository extends JpaRepository<Country, Long> {
@Query("SELECT c FROM Country c")
Country findAll();
}
通过以上定义,在Entity中即可省略掉@NamedQuery定义,让Entity类看起来更清爽。
3、通过方法名即可自动生成HQL语句;
如果你使用过Spring Data JPA,那么一定会对其提供的方法名自动转换为HQL感到十分有意思,这也是Spring Data JPA让人觉得很方便的地方,下面给两个转换规则的例子:
Keyword | Sample | JPQL snippet
And | findByLastnameAndFirstname |… where x.lastname = ?1 and x.firstname = ?2
Or | findByLastnameOrFirstname |… where x.lastname = ?1 or x.firstname = ?2
具体转换规则可参考官方文档。
4、通过接口自动注入实现类,实现非常简单。
我们只需要定义一个类似DAO的接口类,并继承Spring Data JPA提供的Repository接口类,一切就大功告成了,不需要编写任何一行代码,你的DAO接口类就具备了增删查改、分页、记录数统计等功能,对的,一切就那么简单!
以上是本人对Spring Data JPA使用上的一些感受,如果读者对其很感兴趣,可进一步阅读:
SPRING DATA - JPA项目首页http://www.springsource.org/spring-data
SPRING DATA - JPA参考手册http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/
GETTING STARTED WITH SPRING DATA JPAhttp://blog.springsource.com/2011/02/10/getting-started-with-spring-data-jpa/
首先谈一下Spring Data JPA是什么,简单的说,Spring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,该框架有如下几个优点:
1、提供统一的接口,可避免我们再次重复编写基础的DAO类;
Spring Data JPA提供了几个基础的接口类,分别为CrudRepository、PagingAndSortingRepository、 Repository,其中,CrudRepository提供了基础的增删查改方法,PagingAndSortingRepository则在CrudRepository的基础上提供了对数据查询的分页支持,Repository建立在PagingAndSortingRepository的基础上,提供了完善的接口方法。
以先展示了CrudRepository提供的的接口方法:
Java代码
public interface CrudRepository<T, ID extends Serializable>
extends Repository<T, ID> {
T save(T entity);
T findOne(ID primaryKey);
Iterable<T> findAll();
Long count();
void delete(T entity);
boolean exists(ID primaryKey);
// … more functionality omitted.
}
2、遵循JPA规范,同时也提供了灵活的数据访问方式;
Spring Data JPA能够很好的兼容目前JPA2.0规范,在定义Entity类的时候,可以在类中定义标准的@NamedQuery查询,也可以在Spring Data JPA的Repository类的方法中定义@Query查询。
标准的JPA对@NamedQuery定义如下:
Java代码
@Entity
@NamedQuery(name="Country.findAll", query="SELECT c FROM Country c")
public class Country {
...
}
Spring Data JPA对@Query定义如下:
Java代码
public interface CountryRepository extends JpaRepository<Country, Long> {
@Query("SELECT c FROM Country c")
Country findAll();
}
通过以上定义,在Entity中即可省略掉@NamedQuery定义,让Entity类看起来更清爽。
3、通过方法名即可自动生成HQL语句;
如果你使用过Spring Data JPA,那么一定会对其提供的方法名自动转换为HQL感到十分有意思,这也是Spring Data JPA让人觉得很方便的地方,下面给两个转换规则的例子:
Keyword | Sample | JPQL snippet
And | findByLastnameAndFirstname |… where x.lastname = ?1 and x.firstname = ?2
Or | findByLastnameOrFirstname |… where x.lastname = ?1 or x.firstname = ?2
具体转换规则可参考官方文档。
4、通过接口自动注入实现类,实现非常简单。
我们只需要定义一个类似DAO的接口类,并继承Spring Data JPA提供的Repository接口类,一切就大功告成了,不需要编写任何一行代码,你的DAO接口类就具备了增删查改、分页、记录数统计等功能,对的,一切就那么简单!
以上是本人对Spring Data JPA使用上的一些感受,如果读者对其很感兴趣,可进一步阅读:
SPRING DATA - JPA项目首页http://www.springsource.org/spring-data
SPRING DATA - JPA参考手册http://static.springsource.org/spring-data/data-jpa/docs/current/reference/html/
GETTING STARTED WITH SPRING DATA JPAhttp://blog.springsource.com/2011/02/10/getting-started-with-spring-data-jpa/
相关文章推荐
- spring data jpa 使用技巧
- Spring Data JPA 简单的使用
- Spring Data Jpa 使用Left Join
- SpringData JPA 的使用和简介
- Spring Data Jpa 简单使用事务
- Spring Data Jpa 简单使用事务
- 初谈使用Spring的感受
- spring data jpa删除的使用方式
- Spring data JPA中使用Specifications动态构建查询
- spring data jpa 使用(一)
- Spring data jpa 使用技巧记录
- 使用Spring替换properties文件定义属性的方法
- [spring-framework] 定时器配置和使用(补充篇)
- SpringBoot使用笔记
- spring使用jetty+jndi配置druid数据源
- spring 整合 redis,以及spring的RedisTemplate如何使用
- Spring Boot与Kotlin使用Spring Data Rest创建HAL风格Restful接口
- Visual Studio 2008的使用感受
- 使用struts+spring+hibernate 组装web应用
- spring使用加密的属性文件