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

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.zhengjiang</groupId>
<artifactId>springboot-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-demo</name>
<description>Demo project for Spring Boot</description> <properties>
<java.version>1.8</java.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.6</version>
</dependency>
<!-- import lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build> </project>

2、修改application.properties 为yml配置

 spring:
profiles:
active: product
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
username: root
password:
jpa:
hibernate:
ddl-auto: update
show-sql: true
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: UTC

创建实体类UserInfo:

 package com.zhengjiang.springboot.demo.entity;

 import java.util.Date;

 import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; import org.springframework.stereotype.Component; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data;
import lombok.ToString; @Data
@ToString
@Entity
@Table(name = "t_sys_user")
@Component
@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })
public class UserInfo{ public UserInfo() {} public UserInfo(String name) {this.name = name;}
@Id
@GeneratedValue
private Long id; //ID
private String name; //姓名
private String jobNumber; //工号
private Date createTime; //创建时间
}

创建一个 Repository

 package com.zhengjiang.springboot.demo.respository;

 import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import com.zhengjiang.springboot.demo.entity.UserInfo; public interface UserRepository extends JpaRepository<UserInfo, Long>,JpaSpecificationExecutor<UserInfo> {
UserInfo findByName(String name);
}

创建service 以及实现类

 package com.zhengjiang.springboot.demo.service;

 import java.util.List;

 import org.springframework.data.domain.Page;

 import com.zhengjiang.springboot.demo.entity.UserInfo;

 public interface UserService {

     UserInfo findById(Long id);
List<UserInfo> getUserList();
UserInfo getUserByName(String name);
UserInfo addUserInfo(UserInfo userInfo);
UserInfo updateUserInfoById(UserInfo userInfo);
void deleteUserInfoById(Long Id);
List<UserInfo>getCurrentUserList();
Page<UserInfo> getPageUserList();
}
 package com.zhengjiang.springboot.demo.service.impl;

 import java.util.List;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.PageRequest; import com.zhengjiang.springboot.demo.entity.UserInfo;
import com.zhengjiang.springboot.demo.respository.UserRepository;
import com.zhengjiang.springboot.demo.service.UserService; @Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository; @Override
public UserInfo findById(Long id) {
return userRepository.getOne(id);
}
@Override
public List<UserInfo> getUserList() {
return userRepository.findAll();
} @Override
public UserInfo getUserByName(String name) {
UserInfo userInfo = userRepository.findByName(name);
return userInfo;
} @Override
public UserInfo addUserInfo(UserInfo userInfo) {
return userRepository.save(userInfo);
} @Override
public UserInfo updateUserInfoById(UserInfo userInfo) {
return userRepository.save(userInfo);
} @Override
public void deleteUserInfoById(Long id) {
userRepository.deleteById(id);
} @Override
public List<UserInfo> getCurrentUserList() {
Sort sort=new Sort(Sort.Direction.DESC,"createTime");
return userRepository.findAll(sort);
}
@Override
public Page<UserInfo> getPageUserList() {
Sort sort=new Sort(Sort.Direction.DESC,"createTime");
PageRequest pageable=new PageRequest(0,5,sort);
userRepository.findAll(pageable);
return userRepository.findAll(pageable);
}
}

创建controller

 package com.zhengjiang.springboot.demo.controller;

 import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimeZone; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.data.domain.Page;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.zhengjiang.springboot.demo.entity.UserInfo;
import com.zhengjiang.springboot.demo.service.UserService; @RestController
@RequestMapping("/test")
public class TestController { @Autowired
private UserService userService; /**
*
* @param id
* @return
*/
@GetMapping(value = "/getOne")
public UserInfo getOne(@RequestParam("id") Long id) {
return userService.findById(id);
} /**
* 获取所有用户
* @return
*/
@GetMapping(value = "/getUserList")
public List<UserInfo> getUserList() {
return userService.getUserList();
} /**
* 根据用户名查找
* @param name
* @return
*/
@GetMapping(value = "/getUserInfo")
public UserInfo getUserInfoByName(@RequestParam("name") String name) {
UserInfo u = userService.getUserByName(name);
return u;
} /**
* 根据createTime倒序查询
* @return
*/
@GetMapping(value = "/getCurrentUserList")
public List<UserInfo> getCurrentUserList(){
return userService.getCurrentUserList();
} /**
* 分页查找
* @return
*/
@GetMapping(value="/getPageUserList")
public Page<UserInfo> getPageUserList(){
return userService.getPageUserList();
} /**
* 添加用户
* @param userInfo
* @return
*/
@PostMapping(value = "/addUserInfo")
public UserInfo addUserInfo(UserInfo userInfo) {
return userService.addUserInfo(userInfo);
} /**
* 更新用户
* @param userInfo
* @return
*/
@PostMapping(value ="/updateUserInfo")
public UserInfo updateUserInfo(UserInfo userInfo){
return userService.updateUserInfoById(userInfo);
} /**
* 删除用户
* @param id
*/
@PostMapping(value="/deleteUserInfo")
public void deleteUserInfo(@RequestParam("id") Long id){
userService.deleteUserInfoById(id);
} @InitBinder
protected void init(HttpServletRequest request, ServletRequestDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));/*TimeZone时区,解决差8小时的问题*/
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
}

用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. Django之序列化

    关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. 1.serializers           from django.core ...

  2. [C++ STL] set使用详解

    一.set介绍: set容器内的元素会被自动排序,set与map不同,set中的元素即是键值又是实值,set不允许两个元素有相同的键值.不能通过set的迭代器去修改set元素,原因是修改元素会破坏se ...

  3. Qt实现客户端与服务器消息发送

    这里用Qt来简单设计实现一个场景,即: ①两端:服务器QtServer和客户端QtClient ②功能:服务端连接客户端,两者能够互相发送消息,传送文件,并且显示文件传送进度. 环境:VS20013+ ...

  4. 299 Bulls and Cows 猜数字游戏

    你正在和你的朋友玩猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜.每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为”Bulls“, 公牛),有多少位数字 ...

  5. 接口与抽象类的区别-Java

    概念-抽象类: 类是对某一个对象的具体描述,抽象类则是对有共通之处的对象,描述共通之处的类;包含抽象方法的类一定的抽象类,抽象类并不一定包含抽象方法;抽象类中可以有数据成员,但数据成员必须是stati ...

  6. java.lang.RuntimeException: java.lang.NullPointerException...的错误

    先FQ,让电脑能登上谷歌,然后重新安装,应该就好了,我的是这样解决的.如果下次安装又报:java.lang.RuntimeException: java.lang.NullPointerExcepti ...

  7. C/C++ struct定义、声明、对齐方式

    一.定义/声明方式 第一种:仅有结构体名,不定义/声明变量 struct MyStruct {  int i:     char a[10];     double b; }:第二种:有结构体名,并声 ...

  8. java继承问题

    代码: 父类: public class Father { public Father() { System.out.println("基类构造函数{"); show(); new ...

  9. re模块,正则表达式

    re模块 作用:取文本或者字符串内你所需要的东西 正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符则匹配失败. ^叫做元字符,元 ...

  10. 07Java Server Pages

    Java Server Pages JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分. JSP全称Java Server Pages,是一种动态网页开发技术.它 ...