博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Data Jpa 初探
阅读量:4470 次
发布时间:2019-06-08

本文共 2659 字,大约阅读时间需要 8 分钟。

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

  • 下载网址:
  • 规范文档下载网址:
  • maven坐标如下
org.hibernate.javax.persistence
hibernate-jpa-2.1-api
1.0.0.Final
org.springframework.data
spring-data-jpa
1.9.0.RELEASE
org.hibernate
hibernate-entitymanager
5.0.7.Final

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

其中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支持,以便提供更加优秀的开发条件.

转载于:https://www.cnblogs.com/wangxinblog/p/7421354.html

你可能感兴趣的文章
Nodejs学习笔记(2) 阻塞/非阻塞实例 与 Nodejs事件
查看>>
什么是FreeMaker
查看>>
设计模式学习笔记(总结篇:模式分类)
查看>>
TCP的三次握手/建立连接
查看>>
Python 教程阅读笔记(一):使用解释器
查看>>
运算符重载
查看>>
SDWebImage 新版接口使用方法
查看>>
DataTable导出为word,excel,html,csv,pdf,.txt
查看>>
android ListView详解
查看>>
软件工程 第一次作业
查看>>
Content Server HA搭建
查看>>
[leetCode]Linked List Cycle I+II
查看>>
leetcode中的python学习
查看>>
Zookeeper zkui-zookeeper图形化管理工具
查看>>
CenOS+宝塔(模拟)上线博客项目
查看>>
接口,lambda表达式与内部类(二)
查看>>
Phabricator是什么,代码审查工具
查看>>
DirectX:函数可以连接任意两个filter 分类: Direct...
查看>>
Android APP开发入门教程-Button 分类: JAVA ...
查看>>
WustOJ 1575 Gingers and Mints(快速幂 + dfs )
查看>>