Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库、Map-Reduce 框架、云数据服务等等;另外也包含对关系数据库的访问支持。

<!-- spring data jpa 的maven坐标 -->
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.9.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.0.7.Final</version>
</dependency>

Spring中的applicationContext.xml中关于jpa的配置:

首先引入名称空间:

xmlns:jpa="http://www.springframework.org/schema/data/jpa"

http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
<!-- 描述spring整合JPA -->
<jpa:repositories base-package="dao接口以及实现类所在的包" /> <!-- spring整合jpa配置,jpa管理工厂 -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!-- 连接池 -->
<property name="dataSource" ref="配置的连接池"/>
<!-- 注解扫描domain类 -->
<property name="packagesToScan" value="实体类domain所在的包" />
<!-- jpa采取的底层框架开发,这里使用的是hibernate框架 -->
<property name="persistenceProvider">
<bean class="org.hibernate.ejb.HibernatePersistence" />
</property>
<!-- jpa的设置 -->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="true" />
<property name="database" value="MYSQL" />
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<!-- <property name="showSql" value="true"/> -->
</bean>
</property> <!-- jpa的一些高级特性 -->
<property name="jpaDialect">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.query.substitutions" value="true 1,false 0" />
</map>
</property>
</bean> <!--配置 jpa事务管理器 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"></property>
</bean>
<!-- 自动事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager" />

其中jpa具有的一些参数:

  • dataSource属性指定使用Spring定义的数据源;

  • persistenceXmlLocation指定JPA配置文件为chapter8/persistence.xml,且该配置文件非常简单,具体配置完全在Spring中进行;
  • persistenceUnitName指定持久化单元名字,即JPA配置文件中指定的;
  • persistenceProvider:指定JPA持久化提供商,此处使用Hibernate实现HibernatePersistence类;
  • jpaVendorAdapter:指定实现厂商专用特性,即generateDdl= true表示自动生成DDL,database= MYSQL表示使用的是mysql数据库;
  • jpaDialect:如果指定jpaVendorAdapter此属性可选,此处为HibernateJpaDialect;

当使用了spring data jpa去集成hibernate等框架时候,可以采用dao接口继承jpa提供的接口的方式进行CRUD操作,而不需要自己编写实体类去实现,spring会在执行的之后,自动生成实现类,从而极大的简化了操作.

以下是dao继承的接口编写规则:

  • Repository (空接口)

  • CrudRepository (增删改查)
  • PagingAndSortingRepository (分页和排序)
  • JpaRepository (扩展增删改查、批量操作 )
  • JpaSpecificationExecutor: 用来做负责查询的接口
  • Specification:是Spring Data JPA提供的一个查询规范, 要做复杂的查询,类似hibernate QBC查询

上述规则描述中,标绿的为常用接口.当dao接口继承了JpaRepository后,就可以在servie类汇总,使用

这一系列的方法.

而当dao接口继承了JpaSpecificationExecutor接口后,便可实现如下一系列方法.

同时,继承了JpaSpecificationExecutor接口后,还可以自定义方法,以及按照规则编写方法.

  1. 在dao接口中,新建方法,加上注解,就可以使用HQL语句进行CRUD操作.

    @Query("HQL语句")
    @Modifying

注:

  • @Query注解默认接受HQL语句,如果想配置SQL,可以将nativeQuery属性设置true
  • @Query注解也可以配置增删改操作,但是要添加@Modifying注解
  1. 另一种方法,不需要编写HQL语句,也可以进行查询操作,即按照规则编写方法使用JPQL语法自动实现数据库查询的操作.

JPQL查询方法编写规则:

spring data jpa是一种非常好的orm规范,虽然目前只有有hibernate,OpenJPA,TopLink和EclipseJPA等持久化层框架实现,但发展空间非常大,并且能极大的简化程序员的操作,希望未来有更多的持久化层能对jpa支持,以便提供更加优秀的开发条件.

Spring Data Jpa 初探的更多相关文章

  1. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  2. spring boot(五):spring data jpa的使用

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

  3. 转:使用 Spring Data JPA 简化 JPA 开发

    从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...

  4. 深入浅出学Spring Data JPA

    第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map ...

  5. spring data jpa 调用存储过程

    网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...

  6. Spring Data JPA 学习记录1 -- 单向1:N关联的一些问题

    开新坑 开新坑了(笑)....公司项目使用的是Spring Data JPA做持久化框架....学习了一段时间以后发现了一点值得注意的小问题.....与大家分享 主要是针对1:N单向关联产生的一系列问 ...

  7. Spring Boot with Spring Data JPA (1) - Concept

    What's Spring Data JPA? According to Pivotal, Spring Data JPA, part of the larger Spring Data family ...

  8. 了解 Spring Data JPA

    前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择.它一改之前 EJB 2.x 中实体 B ...

  9. spring spring data jpa save操作事务

    整合spring spring data jpa的时候,在save方法上加了@Transactional注解.此时调用springdatajpa save方法并不会真的把数据提交给数据库,而是缓存起来 ...

随机推荐

  1. 模拟元素的title属性,自定义Vue指令

    function showTitle(el, title) { const popover = getPopover() const popoverStyle = popover.style if ( ...

  2. 中兴ZXV10 B860AV1.1 全TTL操作完美破解

    本文转自:http://www.znds.com/tv-496624-1-1.html 1)前期准备工作 1.1 拆开盒子,TTL接线,这个论坛里有好多其它帖子,就不再详细描述. 1.2 复制需要安装 ...

  3. c#开源项目[转]

    一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(as ...

  4. 翻译:Laravel-4-Generators 使用自己定义代码生成工具高速进行Laravel开发

    使用自己定义代码生成工具高速进行Laravel开发 这个Laravle包提供了一种代码生成器,使得你能够加速你的开发进程.这些生成器包含: generate:model – 模型生成器 generat ...

  5. mq和redis安装

    [root@129-2-10-8 src]# cat b.sh #!/bin/bash ####install redis software #####echo "############# ...

  6. keep learning

    fueling people’s creativity  助长了人们的创造力,燃烧了人们的激情

  7. MySQL数据库运维的五大指标

    如何评价一个公司数据库运维水平的高低?用什么来进行横向与纵向对比?自动化平台建设的目标是什么?必须有相应的指标体系来指导,此指标体系必须满足以下条件: • 可以用数字来测算和衡量 • 最终指标,而不是 ...

  8. 按SCI影响因子排序的前50人工智能期刊列表

    附录二:按SCI影响因子排序的前50人工智能期刊列表 出版物名称,影响因子 IEEE TRANSACTIONS ON FUZZY SYSTEMS, 6.701    International Jou ...

  9. ubuntu 按键替换 Control_R to Left

    ubuntu 按键替换 Control_R to Left 1 查看当前键盘布局 $xmodmap -pke keycode 105 = Control_R NoSymbol Control_Rkey ...

  10. 哪一个不是EL定义的隐式对象?(选择1项)

    哪一个不是EL定义的隐式对象?(选择1项) A cookie B.pageContext C.attributes D initParam 解答:C 1)pageContext:JSP 页的上下文.它 ...