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. 二分搜索 POJ 1064 Cable master

    题目传送门 /* 题意:n条绳子问切割k条长度相等的最长长度 二分搜索:搜索长度,判断能否有k条长度相等的绳子 */ #include <cstdio> #include <algo ...

  2. Visual Studio 生成项目时脚本执行

    项目属性 - 生成事件 项目生成前:预先生成事件命令行: 项目生成后:后期生成事件命令行:例:copy $(ProjectDir)Reference\sms_cfg.ini $(TargetDir) ...

  3. ImmutableJS

    引用大神的一句话:(具体是谁自己问度娘) Shared mutable state is the root of all evil(共享的可变状态是万恶之源) -- Pete Hunt   JavaS ...

  4. git上手简洁手册

    下载安装git 创建文件夹:learngit 用Git CMD进入文件夹: cd learngit 用Git CMD初始化git: git init 创建文件:新建一个文件在learngit文件夹下, ...

  5. 伪装IP进行投票

    伪装IP投票说明 1,目的 在访问网页链接进行投票时,网站往往对同一个IP的投票次数进行了限制,无法连续重复投票.为此可以使用“火狐浏览器+IP修改插件”,通过人为设置浏览器IP,绕过网站IP检查,可 ...

  6. self和super的区别

    (1)self调用自己方法,super调用父类方法 (2)self是类,super是预编译指令 (3)[self class]和[super class]输出是一样的 ①当使用 self 调用方法时, ...

  7. (转)Hibernate框架基础——多对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52756536 多对多关联关系映射 多对多的实体关系模型也是很常见的,比如学生和课程的关系.一个 ...

  8. Windows提高_2.3第三部分:内核区同步

    第三部分:内核区同步 等待函数(WaitForObject) 等待函数的形式 单个:WaitForSingleObject 多个:WaitForMultipleObjects 一个可以被等待的对象通常 ...

  9. Xamarin View获取属性的绑定信息

    public static Binding GetBinding( BindableObject self, BindableProperty property) { var methodInfo = ...

  10. CAD使用SetxDataString写数据(网页版)

    主要用到函数说明: MxDrawEntity::SetxDataString 写一个字符串扩展数据,详细说明如下: 参数 说明 [in] BSTR val 字符串值 szAppName 扩展数据名称 ...