Spring-data-jpa 笔记(一)
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 笔记(一)的更多相关文章
- Spring Data JPA笔记
1. Spring Data JPA是什么 Spring Data JPA是Spring Data大家族中的一员,它对对持久层做了简化,用户只需要声明方法的接口,不需要实现该接口,Spring Dat ...
- SpringBoot学习笔记:Spring Data Jpa的使用
更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...
- 干货|一文读懂 Spring Data Jpa!
有很多读者留言希望松哥能好好聊聊 Spring Data Jpa!其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring D ...
- 如何在Spring Data JPA中引入Querydsl
一.环境说明 基础框架采用Spring Boot.Spring Data JPA.Hibernate.在动态查询中,有一种方式是采用Querydsl的方式. 二.具体配置 1.在pom.xml中,引入 ...
- SpringBoot系列之Spring Data Jpa集成教程
SpringBoot系列之Spring Data Jpa集成教程 Spring Data Jpa是属于Spring Data的一个子项目,Spring data项目是一款集成了很多数据操作的项目,其下 ...
- 正确使用Spring Data JPA规范
在优锐课的学习分享中探讨了关于,Spring Data JPA的创建主要是为了通过按方法名称生成查询来轻松创建查询. 但是,有时我们需要创建复杂的查询,而无法利用查询生成器.码了很多知识笔记分享给大家 ...
- 快速搭建springmvc+spring data jpa工程
一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...
- spring boot(五):spring data jpa的使用
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...
- 转:使用 Spring Data JPA 简化 JPA 开发
从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...
- 深入浅出学Spring Data JPA
第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map ...
随机推荐
- hihocoder #1698 假期计划 (排列组合+费马小定理+乘法逆元)
Description 小Ho未来有一个为期N天的假期,他计划在假期中看A部电影,刷B道编程题.为了劳逸结合,他决定先拿出若干天看电影,再拿出若干天刷题,最后再留若干天看电影.(若干代指大于0) 每 ...
- ACM_完全背包
背包3 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n种(每一种有无数个)重量和价值分别为Wi,Vi的物品,现从这些物品中挑 ...
- Linux环境下安装JDK并配置环境变量
首先查看是否已经安装了JDK并配置环境变量. [root@dhcc_plat opt]# java -version -bash: java: command not found [root@dhcc ...
- ViewPager(1)FragmentPagerAdapter
FragmentPagerAdapter 适合只有少量的pager,所有pager同时全部存在,不会有被销毁的,page过多很容易内存溢出. 1,代码 1.1 ViewPagerMain.java i ...
- CSS之选择符、链接、盒子模型、显示隐藏元素
<html> <head> <meta charset="utf-8"> <title>选择符.链接.盒子模型.显示隐藏元素< ...
- bnu 51640 Training Plan DP
https://www.bnuoj.com/bnuoj/problem_show.php?pid=51640 dp[i][j]表示前j个数,分成了i组,最小需要多少精力. 那么,求解订票dp[i][j ...
- 在计算机视觉与人工智能领域,顶级会议比SCI更重要(内容转)
很多领域,SCI是王道,尤其在中国,在教师科研职称评审和学生毕业条件中都对SCI极为重视,而会议则充当了补充者的身份.但是在计算机领域,尤其是人工智能与机器学习领域里,往往研究者们更加青睐于会议 我无 ...
- PHP开发心得四
1,php返回给html页面的Json数据不能含有回车符 某次用php编写查询数据库数据,以json格式返回给前端页面js文件,js文件以angularJS的函数调用处理的方式进行数据显示,但数据返回 ...
- DWARF调试格式的简介
DWARF调试格式的简介 Michael J. Eager, Eager Consulting Feb, 2007 翻译:吴晖 2012年2月 如果我们可以编写确保能正确工作且永远不需要调试的程序,这 ...
- 梦想MxWeb3D协同设计平台 2018.10.12更新
SDK开发包下载地址: http://www.mxdraw.com/ndetail_10107.html 1. 全新的在线的三维协同设计平台,高效异步方式,基于JavaScript和WebGL技术,前 ...