在实际开发过程中,对数据库的操作无非就“增删改查”。就最为普遍的单表操作而言,除了表和字段不同外,语句都是类似的,开发人员需要写大量类似而枯燥的语句来完成业务逻辑。

为了解决这些大量枯燥的数据操作语句,我们第一个想到的是使用ORM框架,比如:Hibernate。通过整合Hibernate之后,我们以操作Java实体的方式最终将数据改变映射到数据库表中。

为了解决抽象各个Java实体基本的“增删改查”操作,我们通常会以泛型的方式封装一个模板Dao来进行抽象简化,但是这样依然不是很方便,我们需要针对每个实体编写一个继承自泛型模板Dao的接口,再编写该接口的实现。虽然一些基础的数据访问已经可以得到很好的复用,但是在代码结构上针对每个实体都会有一堆Dao的接口和实现。

由于模板Dao的实现,使得这些具体实体的Dao层已经变的非常“薄”,有一些具体实体的Dao实现可能完全就是对模板Dao的简单代理,并且往往这样的实现类可能会出现在很多实体上。Spring-data-jpa的出现正可以让这样一个已经很“薄”的数据访问层变成只是一层接口的编写方式。比如,下面的例子:

1
2
3
4
5
6
7
8
public interface UserRepository extends JpaRepository<User, Long> {
    User findByName(String name);
    @Query("from User u where u.name=:name")
    User findUser(@Param("name") String name);
}

我们只需要通过编写一个继承自JpaRepository的接口就能完成数据访问,下面以一个具体实例来体验Spring-data-jpa给我们带来的强大功能。

使用示例

由于Spring-data-jpa依赖于Hibernate。如果您对Hibernate有一定了解,下面内容可以毫不费力的看懂并上手使用Spring-data-jpa。如果您还是Hibernate新手,您可以先按如下方式入门,再建议回头学习一下Hibernate以帮助这部分的理解和进一步使用。

工程配置

pom.xml中添加相关依赖,加入以下内容:

1
2
3
4
<dependency
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

application.xml中配置:数据库连接信息(如使用嵌入式数据库则不需要)、自动创建表结构的设置,例如使用mysql的情况如下:

1
2
3
4
5
6
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop

spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:

  • create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
  • create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
  • update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
  • validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

至此已经完成基础配置,如果您有在Spring下整合使用过它的话,相信你已经感受到Spring Boot的便利之处:JPA的传统配置在persistence.xml文件中,但是这里我们不需要。当然,最好在构建项目时候按照之前提过的最佳实践的工程结构来组织,这样以确保各种配置都能被框架扫描到。

转载于:https://www.cnblogs.com/MaxElephant/p/10232324.html

使用Spring-data-jpa(1)(三十)相关推荐

  1. Spring Data JPA教程第一部分:配置

    Spring Data JPA是一个旨在简化基于JPA的存储库的创建并减少与数据库通信所需的代码量的项目. 在我的工作和个人爱好项目中,我已经使用了一段时间,确实使事情变得更加简单和整洁. 现在是时候 ...

  2. Spring Data JPA教程,第一部分: Configuration(翻译)

    Spring Data JPA项目旨在简化基于仓库的JPA的创建并减少与数据库交互的所需的代码量.本人在自己的工作和个人爱好项目中已经使用一段时间,它却是是事情如此简单和清洗,现在是时候与你分享我的知 ...

  3. spring-boot (三) spring data jpa

    学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...

  4. ORM框架之Spring Data JPA(三)高级查询---复杂查询

    一.spring data jpa高级查询 1.1Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data ...

  5. Springboot 系列(十)使用 Spring data jpa 访问数据库

    前言 Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对 ...

  6. Spring Data JPA使用必备(三):Spring Data JPA自定义SQL写法

    Spring Data JPA的前两篇已经写了通过方法名格式自动生成SQL,也简单的提到了@Query注解.但是往往真正的业务逻辑里面,这些是完全不够用的,涉及到一些稍微复杂一点的查询就会有点问题,如 ...

  7. 【Spring Data JPA自学笔记三】Spring Data JPA的基础和高级查询方法

    文章目录 调用接口的基础方法查询 Repository CrudRepository PagingAndSortingRepository JPARepository JpaSpecification ...

  8. springboot学习笔记(三)使用JDBC以及整合spring data jpa

    spring boot JDBC的使用: 1.引入依赖 <dependency><groupId>mysql</groupId><artifactId> ...

  9. springdatajpa命名规则_简单了解下spring data jpa

    公司准备搭建一个通用框架,以后项目就用统一一套框架了 以前只是听过jpa,但是没有实际用过 今天就来学习下一些简单的知识 什么是JPA 全称Java Persistence API,可以通过注解或者X ...

  10. Spring Data JPA 实战

    课程介绍 <Spring Data JPA 实战>内容是基于作者学习和工作中实践的总结和升华,有一句经典的话:"现在的开发人员是站在巨人的肩上,弯道超车".因现在框架越 ...

最新文章

  1. 小心!你下载的机器学习工具包可能是病毒:CuPy被掉包,官方一天后才发现
  2. js -“=”“==”和“===”的区别
  3. FoxMail的25号端口被占用问题
  4. 我们常用的 Integer 内部为什么会去实现 Comparable 接口?
  5. 中国金控(00875.HK)获主席兼首席执行官林裕豪增持15.8万股
  6. 多工作线程获取工作队列简单实现
  7. 判断随机抽取代码_高中数学中离散型随机变量的分布列知道吗?均值与方差能干什么?...
  8. Servlet 应用程序事件、监听器
  9. python——面向对象相关
  10. oracle tovarchar2_oracle数据库中varchar2陷阱
  11. Windows cmd下载文件
  12. 实时下载速度的计算:
  13. 低延迟视频传输 UDP JPEG图像压缩 opencv
  14. 手把手入门C语言—输入数组
  15. 小米平板1android驱动,小米平板3usb驱动
  16. 酷Q自动升级失败的可能解决方法
  17. ps无缝拼图教程一:无缝拼接花纹图案
  18. 与openSNP分享您的遗传故事
  19. git笔记之README.md格式
  20. java 手机应用开发

热门文章

  1. c语言将源文件拷贝到目的文件,C语言编译过程 简介和详解
  2. leetcode算法题--分割等和子集★
  3. python中loop函数运用_使用涉及函数的Python在for循环中填充DataFrame
  4. 内存溢出分析之工具篇
  5. 在python多进程中使用manager和Barrier
  6. 在夕阳下第一次写文章的菜鸟
  7. Node.js 官方Path模块简介
  8. 第一次来请大家多多关照---毕业生找工作篇
  9. Monkey测试1——Monkey的使用
  10. LeanCloud学习笔记(1)