`
xianbin
  • 浏览: 214825 次
  • 来自: ...
社区版块
存档分类
最新评论

Spring Data JPA 使用感受

阅读更多
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提供的的接口方法:
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定义如下:
@Entity
@NamedQuery(name="Country.findAll", query="SELECT c FROM Country c") 
public class Country {
  ...
}


Spring Data JPA对@Query定义如下:
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使用上的一些感受,如果读者对其很感兴趣,可进一步阅读:
分享到:
评论
4 楼 springdata 2014-08-03  
spring data jpa相关代码demo下载:http://www.zuidaima.com/share/kjpa-p1-s1.htm
3 楼 liuxiang00435057 2012-12-21  
public List<Ulproduct> findAll(String username) {
List<Ulproduct> pageProducts = ulproductDao
.findAll(queryAllByMutiCondition(username));
return pageProducts;
}

private  Specification<Ulproduct> queryAllByMutiCondition(
final String username) {
return new Specification<Ulproduct>() {

@Override
public Predicate toPredicate(Root<Ulproduct> p,
CriteriaQuery<?> q, CriteriaBuilder cb) {
//q = cb.createQuery(Ulproduct.class);
//p = q.from(Ulproduct.class);
q.multiselect(p.get("productsname"),
cb.sum(p.<Integer> get("stocksnum")),
cb.sum(p.<Double> get("price")),
cb.sum(p.<Double> get("cost")));


q.where(cb.equal(p.<String>get("username"),
StringUtils.trim(username)));

q.groupBy(p.get("productsname"));

q.getGroupRestriction();

return null;
}
};
}

红色部分根本没起作用,很诡异
2 楼 liuxiang00435057 2012-12-21  
我的代码是这样的,但是又问题
public List<Ulproduct> findAll(String username) {
List<Ulproduct> pageProducts = ulproductDao
.findAll(queryAllByMutiCondition(username));
return pageProducts;
}

private  Specification<Ulproduct> queryAllByMutiCondition(
final String username) {
return new Specification<Ulproduct>() {

@Override
public Predicate toPredicate(Root<Ulproduct> p,
CriteriaQuery<?> q, CriteriaBuilder cb) {
//q = cb.createQuery(Ulproduct.class);
//p = q.from(Ulproduct.class);
q.multiselect(p.get("productsname"),
cb.sum(p.<Integer> get("stocksnum")),
cb.sum(p.<Double> get("price")),
cb.sum(p.<Double> get("cost")));

q.where(cb.equal(p.<String>get("username"),
StringUtils.trim(username)));

q.groupBy(p.get("productsname"));

q.getGroupRestriction();

return null;
}
};
}
1 楼 liuxiang00435057 2012-12-21  
动态的分组统计查询怎么实现呢?

相关推荐

    Spring Data JPA中文文档[1.4.3]_springdatajpa_erlang_waitxpf_

    **Spring Data JPA** 是一个基于 **Java** 的开源框架,它是 **Spring Framework** 的一个模块,主要用于简化 **Java Persistence API (JPA)** 的使用。JPA 是 Java 平台上的一个标准,用于管理和持久化应用程序的...

    Spring Data JPA API(Spring Data JPA 开发文档).CHM

    Spring Data JPA API。 Spring Data JPA 开发文档。 官网 Spring Data JPA API。

    Spring Data JPA 笔记

    通过使用Spring Data JPA,开发者可以避免编写大量的JPA(Java Persistence API)和SQL代码,专注于业务逻辑。本笔记将深入探讨Spring Data JPA的核心概念、功能以及如何在实际项目中应用。 首先,我们需要理解JPA...

    spring注解+spring data jpa文档+JPA文档.rar

    "spring data jpa官方文档中文翻译"则提供了Spring Data JPA的详细指南,包括其设计原理、基本概念、使用方法和最佳实践。"JPA2.0官方文档"则深入讲解了JPA规范的各个方面,包括实体管理、查询、事务和并发控制等。 ...

    Spring Data JPA从入门到精通

    Spring Data JPA是Spring Framework的一个模块,它简化了Java Persistence API(JPA)的使用,使开发者能够以更简洁的方式与数据库进行交互。以下将详细阐述Spring Data JPA的关键知识点。 1. **Spring Boot基础**...

    Spring Data JPA的优点和难点.pdf

    然而,尽管Spring Data JPA带来了诸多便利,但在实际使用中也会遇到一些挑战和难点: 1. **SQL性能问题**: - Spring Data JPA虽然简化了查询编写,但可能导致生成的SQL不够优化,尤其是在处理大数据量或复杂查询...

    spring data jpa 教程

    本教程将详细介绍 Spring Data JPA 的核心概念与使用方法,帮助开发者从基础入门到实现复杂查询的完整过程。 第一章:Spring Data JPA 入门 Spring Data JPA 简化了 JPA(Java Persistence API)的开发,通过约定...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    Spring Data JPA是Spring框架的一个扩展,它简化了对Java Persistence API (JPA) 的使用,使数据库操作更加便捷。通过Spring Data JPA,我们可以直接通过接口定义来实现对数据库的CRUD操作,无需编写大量的DAO层代码...

    Spring Data JPA.zip

    - **强大的查询支持**:除了简单的 CRUD 方法,Spring Data JPA 还支持基于方法名的复杂查询,甚至可以使用 JPA Querydsl 或 Specification 进行更复杂的查询。 - **事务管理**:Spring Data JPA 结合 Spring 的事务...

    Spring Data JPA Demo

    Spring Data JPA 默认使用Hibernate 作为JPA 实现。Hibernate 是一个流行的ORM(对象关系映射)框架,它将Java 对象与数据库记录对应起来。我们可以配置Hibernate 具体的行为,如缓存策略、实体监听器等。 通过这...

    Spring Data JPA中文文档[1.4.3].zip

    1. **简介**:了解Spring Data JPA的目标,它是如何简化JPA的使用,以及它如何与其他Spring模块集成。 2. **快速入门**:包括设置项目依赖,配置数据源和JPA供应商(如Hibernate),以及创建第一个Repository接口。...

    使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速开发迭代,可用于开发模板

    使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速开发迭代,可用于开发模板,项目经过测试,可完美运行! 使用 SpringBoot + SpringDataJPa 设计通用的权限管理系统,适合管理系统快速...

    springdatajpa.pdf

    SpringBoot集成了SpringDataJPA之后,就可以利用SpringBoot的自动配置能力,让开发者能够快速搭建和运行使用SpringDataJPA的项目。 在SpringBoot项目中整合SpringDataJPA,首先要导入必要的Maven依赖。在项目中,...

    spring data jpa简单案例

    Spring Data JPA 是 Spring 框架的一个模块,它为使用 JPA(Java Persistence API)提供了强大的支持,简化了数据访问层的开发。通过使用 Spring Data JPA,我们可以避免编写大量重复的 CRUD(创建、读取、更新、...

    其实spring data jpa比mybatis更好用.zip_JPA mybatis

    Spring Data JPA是Spring Framework的一个模块,它简化了JPA的使用。它提供了自动配置、基于方法的查询支持、Repository抽象层等特性,极大地提高了开发效率。通过定义简单的接口,Spring Data JPA可以自动生成对应...

    spring data jpa + spring + json demo

    【标题】"spring data jpa + spring + json demo"揭示了这个项目是关于使用Spring Data JPA、Spring框架以及JSON处理的一个示例应用。Spring Data JPA是Spring框架的一个模块,它简化了JPA(Java Persistence API)...

    springBoot整合springData JPA

    **SpringBoot整合SpringData JPA** 是一个现代Java开发中的常见技术栈,它结合了Spring Boot的便捷性和Spring Data JPA的数据访问效率。Spring Boot简化了应用的初始搭建以及配置,而Spring Data JPA则是Spring ...

    spring学习:spring data jpa

    在实际使用中,我们需要配置Spring Data JPA,这通常涉及到以下步骤: 1. 添加依赖:在Maven或Gradle的配置文件中添加Spring Data JPA和相应的数据库驱动依赖。 2. 配置数据源:在Spring的配置文件中,设置数据源...

Global site tag (gtag.js) - Google Analytics