Spring Data JPA简介:

可以理解为 JPA 规范的再次封装抽象,底层还是使用了 Hibernate 的 JPA 技术实现,引用 JPQL(Java Persistence Query Language)查询语言,属于 Spring 的整个生态体系的一部分。

优势:

属于 Spring 的整个生态体系的一部分上手简单、开发效率高,ORM提供的能力他都提供,ORM框架没有提供的业务逻辑功能Spring-data-jpa也提供,全方位的解决用户的需求。使用Spring-data-jpa进行开发的过程中,常用的功能,我们几乎不需要写一条sql语句。

Spring Data操作主要特性:

提供模板操作,如 Spring Data Redis 和 Spring Data Riak;

强大的 Repository 和定制的数据储存对象的抽象映射;

对数据访问对象的支持(Auting 等)。

Spring Data JPA 的主要类及结构图:

七个大 Repository 接口:

Repository(org.springframework.data.repository);

CrudRepository(org.springframework.data.repository);

PagingAndSortingRepository(org.springframework.data.repository);

JpaRepository(org.springframework.data.jpa.repository);

QueryByExampleExecutor(org.springframework.data.repository.query);

JpaSpecificationExecutor(org.springframework.data.jpa.repository);

QueryDslPredicateExecutor(org.springframework.data.querydsl)。

两大 Repository 实现类:

SimpleJpaRepository(org.springframework.data.jpa.repository.support);

QueryDslJpaRepository(org.springframework.data.jpa.repository.support)。

Quick start:

以spring-boot2.1.3 ,mysql5.5+ 为技术场景

开发环境:

SPRING STS,MAVEN3.0+,JDK1.8

1、创建sringboot工程

完整工程结构图如下:

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.1.3.RELEASE</version>
  10. <relativePath /> <!-- lookup parent from repository -->
  11. </parent>
  12. <groupId>com.zhengjiang</groupId>
  13. <artifactId>springboot-demo</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <name>springboot-demo</name>
  16. <description>Demo project for Spring Boot</description>
  17.  
  18. <properties>
  19. <java.version>1.8</java.version>
  20. </properties>
  21.  
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-web</artifactId>
  26. </dependency>
  27.  
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. </dependency>
  33.  
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-devtools</artifactId>
  37. <optional>true</optional>
  38. </dependency>
  39.  
  40. <dependency>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-starter-data-jpa</artifactId>
  43. </dependency>
  44.  
  45. <dependency>
  46. <groupId>mysql</groupId>
  47. <artifactId>mysql-connector-java</artifactId>
  48. <version>6.0.6</version>
  49. </dependency>
  50.  
  51. <dependency>
  52. <groupId>com.alibaba</groupId>
  53. <artifactId>druid-spring-boot-starter</artifactId>
  54. <version>1.1.6</version>
  55. </dependency>
  56. <!-- import lombok -->
  57. <dependency>
  58. <groupId>org.projectlombok</groupId>
  59. <artifactId>lombok</artifactId>
  60. <scope>provided</scope>
  61. </dependency>
  62. </dependencies>
  63.  
  64. <build>
  65. <plugins>
  66. <plugin>
  67. <groupId>org.springframework.boot</groupId>
  68. <artifactId>spring-boot-maven-plugin</artifactId>
  69. <configuration>
  70. <fork>true</fork>
  71. </configuration>
  72. </plugin>
  73. </plugins>
  74. </build>
  75.  
  76. </project>

2、修改application.properties 为yml配置

  1. spring:
  2. profiles:
  3. active: product
  4. datasource:
  5. driver-class-name: com.mysql.jdbc.Driver
  6. url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
  7. username: root
  8. password:
  9. jpa:
  10. hibernate:
  11. ddl-auto: update
  12. show-sql: true
  13. jackson:
  14. date-format: yyyy-MM-dd HH:mm:ss
  15. time-zone: UTC

创建实体类UserInfo:

  1. package com.zhengjiang.springboot.demo.entity;
  2.  
  3. import java.util.Date;
  4.  
  5. import javax.persistence.Entity;
  6. import javax.persistence.GeneratedValue;
  7. import javax.persistence.Id;
  8. import javax.persistence.Table;
  9.  
  10. import org.springframework.stereotype.Component;
  11.  
  12. import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  13.  
  14. import lombok.Data;
  15. import lombok.ToString;
  16.  
  17. @Data
  18. @ToString
  19. @Entity
  20. @Table(name = "t_sys_user")
  21. @Component
  22. @JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
  23. public class UserInfo{
  24.  
  25. public UserInfo() {}
  26.  
  27. public UserInfo(String name) {this.name = name;}
  28. @Id
  29. @GeneratedValue
  30. private Long id; //ID
  31. private String name; //姓名
  32. private String jobNumber; //工号
  33. private Date createTime; //创建时间
  34. }

创建一个 Repository

  1. package com.zhengjiang.springboot.demo.respository;
  2.  
  3. import org.springframework.data.jpa.repository.JpaRepository;
  4. import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
  5.  
  6. import com.zhengjiang.springboot.demo.entity.UserInfo;
  7.  
  8. public interface UserRepository extends JpaRepository<UserInfo, Long>,JpaSpecificationExecutor<UserInfo> {
  9. UserInfo findByName(String name);
  10. }

创建service 以及实现类

  1. package com.zhengjiang.springboot.demo.service;
  2.  
  3. import java.util.List;
  4.  
  5. import org.springframework.data.domain.Page;
  6.  
  7. import com.zhengjiang.springboot.demo.entity.UserInfo;
  8.  
  9. public interface UserService {
  10.  
  11. UserInfo findById(Long id);
  12. List<UserInfo> getUserList();
  13. UserInfo getUserByName(String name);
  14. UserInfo addUserInfo(UserInfo userInfo);
  15. UserInfo updateUserInfoById(UserInfo userInfo);
  16. void deleteUserInfoById(Long Id);
  17. List<UserInfo>getCurrentUserList();
  18. Page<UserInfo> getPageUserList();
  19. }
  1. package com.zhengjiang.springboot.demo.service.impl;
  2.  
  3. import java.util.List;
  4.  
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.data.domain.Page;
  7. import org.springframework.data.domain.Sort;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.data.domain.PageRequest;
  10.  
  11. import com.zhengjiang.springboot.demo.entity.UserInfo;
  12. import com.zhengjiang.springboot.demo.respository.UserRepository;
  13. import com.zhengjiang.springboot.demo.service.UserService;
  14.  
  15. @Service
  16. public class UserServiceImpl implements UserService {
  17. @Autowired
  18. private UserRepository userRepository;
  19.  
  20. @Override
  21. public UserInfo findById(Long id) {
  22. return userRepository.getOne(id);
  23. }
  24. @Override
  25. public List<UserInfo> getUserList() {
  26. return userRepository.findAll();
  27. }
  28.  
  29. @Override
  30. public UserInfo getUserByName(String name) {
  31. UserInfo userInfo = userRepository.findByName(name);
  32. return userInfo;
  33. }
  34.  
  35. @Override
  36. public UserInfo addUserInfo(UserInfo userInfo) {
  37. return userRepository.save(userInfo);
  38. }
  39.  
  40. @Override
  41. public UserInfo updateUserInfoById(UserInfo userInfo) {
  42. return userRepository.save(userInfo);
  43. }
  44.  
  45. @Override
  46. public void deleteUserInfoById(Long id) {
  47. userRepository.deleteById(id);
  48. }
  49.  
  50. @Override
  51. public List<UserInfo> getCurrentUserList() {
  52. Sort sort=new Sort(Sort.Direction.DESC,"createTime");
  53. return userRepository.findAll(sort);
  54. }
  55. @Override
  56. public Page<UserInfo> getPageUserList() {
  57. Sort sort=new Sort(Sort.Direction.DESC,"createTime");
  58. PageRequest pageable=new PageRequest(0,5,sort);
  59. userRepository.findAll(pageable);
  60. return userRepository.findAll(pageable);
  61. }
  62. }

创建controller

  1. package com.zhengjiang.springboot.demo.controller;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5. import java.util.List;
  6. import java.util.TimeZone;
  7.  
  8. import javax.servlet.http.HttpServletRequest;
  9.  
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.beans.propertyeditors.CustomDateEditor;
  12. import org.springframework.data.domain.Page;
  13. import org.springframework.web.bind.ServletRequestDataBinder;
  14. import org.springframework.web.bind.annotation.GetMapping;
  15. import org.springframework.web.bind.annotation.InitBinder;
  16. import org.springframework.web.bind.annotation.PostMapping;
  17. import org.springframework.web.bind.annotation.PutMapping;
  18. import org.springframework.web.bind.annotation.RequestMapping;
  19. import org.springframework.web.bind.annotation.RequestParam;
  20. import org.springframework.web.bind.annotation.RestController;
  21. import com.zhengjiang.springboot.demo.entity.UserInfo;
  22. import com.zhengjiang.springboot.demo.service.UserService;
  23.  
  24. @RestController
  25. @RequestMapping("/test")
  26. public class TestController {
  27.  
  28. @Autowired
  29. private UserService userService;
  30.  
  31. /**
  32. *
  33. * @param id
  34. * @return
  35. */
  36. @GetMapping(value = "/getOne")
  37. public UserInfo getOne(@RequestParam("id") Long id) {
  38. return userService.findById(id);
  39. }
  40.  
  41. /**
  42. * 获取所有用户
  43. * @return
  44. */
  45. @GetMapping(value = "/getUserList")
  46. public List<UserInfo> getUserList() {
  47. return userService.getUserList();
  48. }
  49.  
  50. /**
  51. * 根据用户名查找
  52. * @param name
  53. * @return
  54. */
  55. @GetMapping(value = "/getUserInfo")
  56. public UserInfo getUserInfoByName(@RequestParam("name") String name) {
  57. UserInfo u = userService.getUserByName(name);
  58. return u;
  59. }
  60.  
  61. /**
  62. * 根据createTime倒序查询
  63. * @return
  64. */
  65. @GetMapping(value = "/getCurrentUserList")
  66. public List<UserInfo> getCurrentUserList(){
  67. return userService.getCurrentUserList();
  68. }
  69.  
  70. /**
  71. * 分页查找
  72. * @return
  73. */
  74. @GetMapping(value="/getPageUserList")
  75. public Page<UserInfo> getPageUserList(){
  76. return userService.getPageUserList();
  77. }
  78.  
  79. /**
  80. * 添加用户
  81. * @param userInfo
  82. * @return
  83. */
  84. @PostMapping(value = "/addUserInfo")
  85. public UserInfo addUserInfo(UserInfo userInfo) {
  86. return userService.addUserInfo(userInfo);
  87. }
  88.  
  89. /**
  90. * 更新用户
  91. * @param userInfo
  92. * @return
  93. */
  94. @PostMapping(value ="/updateUserInfo")
  95. public UserInfo updateUserInfo(UserInfo userInfo){
  96. return userService.updateUserInfoById(userInfo);
  97. }
  98.  
  99. /**
  100. * 删除用户
  101. * @param id
  102. */
  103. @PostMapping(value="/deleteUserInfo")
  104. public void deleteUserInfo(@RequestParam("id") Long id){
  105. userService.deleteUserInfoById(id);
  106. }
  107.  
  108. @InitBinder
  109. protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
  110. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  111. dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));/*TimeZone时区,解决差8小时的问题*/
  112. binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
  113. }
  114. }

用postman 测试接口。

Spring-data-jpa 笔记(一)的更多相关文章

  1. Spring Data JPA笔记

    1. Spring Data JPA是什么 Spring Data JPA是Spring Data大家族中的一员,它对对持久层做了简化,用户只需要声明方法的接口,不需要实现该接口,Spring Dat ...

  2. SpringBoot学习笔记:Spring Data Jpa的使用

    更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...

  3. 干货|一文读懂 Spring Data Jpa!

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa!其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring D ...

  4. 如何在Spring Data JPA中引入Querydsl

    一.环境说明 基础框架采用Spring Boot.Spring Data JPA.Hibernate.在动态查询中,有一种方式是采用Querydsl的方式. 二.具体配置 1.在pom.xml中,引入 ...

  5. SpringBoot系列之Spring Data Jpa集成教程

    SpringBoot系列之Spring Data Jpa集成教程 Spring Data Jpa是属于Spring Data的一个子项目,Spring data项目是一款集成了很多数据操作的项目,其下 ...

  6. 正确使用Spring Data JPA规范

    在优锐课的学习分享中探讨了关于,Spring Data JPA的创建主要是为了通过按方法名称生成查询来轻松创建查询. 但是,有时我们需要创建复杂的查询,而无法利用查询生成器.码了很多知识笔记分享给大家 ...

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

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

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

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

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

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

  10. 深入浅出学Spring Data JPA

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

随机推荐

  1. hihocoder #1698 假期计划 (排列组合+费马小定理+乘法逆元)

    Description 小Ho未来有一个为期N天的假期,他计划在假期中看A部电影,刷B道编程题.为了劳逸结合,他决定先拿出若干天看电影,再拿出若干天刷题,最后再留若干天看电影.(若干代指大于0)  每 ...

  2. ACM_完全背包

    背包3 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n种(每一种有无数个)重量和价值分别为Wi,Vi的物品,现从这些物品中挑 ...

  3. Linux环境下安装JDK并配置环境变量

    首先查看是否已经安装了JDK并配置环境变量. [root@dhcc_plat opt]# java -version -bash: java: command not found [root@dhcc ...

  4. ViewPager(1)FragmentPagerAdapter

    FragmentPagerAdapter 适合只有少量的pager,所有pager同时全部存在,不会有被销毁的,page过多很容易内存溢出. 1,代码 1.1 ViewPagerMain.java i ...

  5. CSS之选择符、链接、盒子模型、显示隐藏元素

    <html> <head> <meta charset="utf-8"> <title>选择符.链接.盒子模型.显示隐藏元素< ...

  6. bnu 51640 Training Plan DP

    https://www.bnuoj.com/bnuoj/problem_show.php?pid=51640 dp[i][j]表示前j个数,分成了i组,最小需要多少精力. 那么,求解订票dp[i][j ...

  7. 在计算机视觉与人工智能领域,顶级会议比SCI更重要(内容转)

    很多领域,SCI是王道,尤其在中国,在教师科研职称评审和学生毕业条件中都对SCI极为重视,而会议则充当了补充者的身份.但是在计算机领域,尤其是人工智能与机器学习领域里,往往研究者们更加青睐于会议 我无 ...

  8. PHP开发心得四

    1,php返回给html页面的Json数据不能含有回车符 某次用php编写查询数据库数据,以json格式返回给前端页面js文件,js文件以angularJS的函数调用处理的方式进行数据显示,但数据返回 ...

  9. DWARF调试格式的简介

    DWARF调试格式的简介 Michael J. Eager, Eager Consulting Feb, 2007 翻译:吴晖 2012年2月 如果我们可以编写确保能正确工作且永远不需要调试的程序,这 ...

  10. 梦想MxWeb3D协同设计平台 2018.10.12更新

    SDK开发包下载地址: http://www.mxdraw.com/ndetail_10107.html 1. 全新的在线的三维协同设计平台,高效异步方式,基于JavaScript和WebGL技术,前 ...