SpringData JPA只是SpringData中的一个子模块

JPA是一套标准接口,而Hibernate是JPA的实现

SpringData JPA 底层默认实现是使用Hibernate

1.      添加pom

#只会执行ddl

spring.jpa.hibernate.ddl-auto=update

spring.jpa.show-sql=true

spring.jackson.serialization.indent_output=true

spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect

3.      DDL

dropdatabaseifexists mybatis;

createdatabase mybatis;

use mybatis;

createtablemybatis.CUSTOMERS (

ID bigint auto_increment notnull,

NAMEvarchar(15) notnull,

EMAIL varchar(128) ,

PASSWORDvarchar(8) ,

PHONE int ,

ADDRESS varchar(255),

SEX char(1) ,

IS_MARRIED bit,

DESCRIPTION text,

IMAGE blob,

BIRTHDAY date,

REGISTERED_TIME timestamp,

primarykey (ID)

);

INSERTINTOmybatis.CUSTOMERS (NAME,PHONE,ADDRESS) VALUES ('老赵', '123456' , 'address 1');

INSERTINTOmybatis.CUSTOMERS (NAME,PHONE,ADDRESS) VALUES ('老王', '654321' , 'address 2');

会自动执行DDL

4.      配置SwaggerConfig

5.      使用jpa生成Customers实体

注意:需要在自增的id get方法上加上@GeneratedValue(strategy =GenerationType.AUTO)

@Id

@Column(name = "ID", unique = true, nullable = false)

@GeneratedValue(strategy = GenerationType.AUTO)

public Long getId() {

returnthis.id;

}

6.      生产CustomersJpaRepository和CustomersRepository

注意:sql里的表名必须和对象名完全一致,包括大小写

package com.example.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.domain.Customers;

publicinterface CustomersJpaRepository extends JpaRepository<Customers,Long>{

}

package com.example.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Query;

import org.springframework.data.repository.Repository;

import org.springframework.data.repository.query.Param;

import com.example.domain.Customers;

//注意:sql里的表名必须和对象名完全一致,包括大小写

publicinterface CustomersRepository extends Repository<Customers,Long>{

@Query(value = "fromCustomers o where id=(select max(id) from Customers p)")

public Customers getCustomersByMaxId();

@Query(value = "fromCustomers o where o.name=?1 and o.phone=?2")

public List<Customers> queryParams1(String name, Integer phone);

@Query(value = "fromCustomers o where o.name=:name and o.phone=:phone")

public List<Customers> queryParams2(@Param("name")String name, @Param("phone")Integer phone);

@Query(value = "fromCustomers o where o.name like %?1%")

public List<Customers> queryLike1(String name);

@Query(value = "fromCustomers o where o.name like %:name%")

public List<Customers> queryLike2(@Param("name")String name);

@Query(nativeQuery = true, value = "select count(1) from Customers o")

publiclong getCount();

}

Repository:是SpringData的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。

CrudRepository:继承Repository,提供增删改查方法,可以直接调用。

PagingAndSortingRepository:继承CrudRepository,具有分页查询和排序功能(本类实例)

JpaRepository:继承PagingAndSortingRepository,针对JPA技术提供的接口

JpaSpecificationExecutor:可以执行原生SQL查询

继承不同的接口,有两个不同的泛型参数,他们是该持久层操作的类对象和主键类型。

7.      配置customersService并且加缓存

package com.example.service;

import java.util.List;

import org.springframework.data.repository.query.Param;

import com.example.domain.Customers;

publicinterface CustomersService {

public Customers getCustomersByMaxId();

public List<Customers> queryParams1(String name, Integer phone);

public List<Customers> queryParams2(@Param("name")String name, @Param("phone")Integer phone);

public List<Customers> queryLike1(String name);

public List<Customers> queryLike2(@Param("name")String name);

publiclong getCount();

public List<Customers> findAll();

public Customers findOne(Long id);

publicvoid delete(longid);

publicvoid deleteAll();

publicvoid save(List<Customers> entities);

publicvoid save(Customers entity);

}

package com.example.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.cache.annotation.CacheConfig;

import org.springframework.cache.annotation.Cacheable;

import org.springframework.stereotype.Service;

importorg.springframework.transaction.annotation.Transactional;

import com.example.domain.Customers;

import com.example.repository.CustomersJpaRepository;

import com.example.repository.CustomersRepository;

import com.example.service.CustomersService;

@Service(value = "customersService")

@Transactional

@CacheConfig(cacheNames = "customers")

publicclass CustomersServiceImpl implements CustomersService{

@Autowired

private CustomersRepository customersRepository;

@Autowired

private CustomersJpaRepository customersJpaRepository;

@Override

@Cacheable

public Customers getCustomersByMaxId() {

returncustomersRepository.getCustomersByMaxId();

}

@Override

@Cacheable

public List<Customers> queryParams1(String name, Integer phone) {

returncustomersRepository.queryParams1(name, phone);

}

@Override

@Cacheable

public List<Customers> queryParams2(String name, Integer phone) {

return  customersRepository.queryParams2(name, phone);

}

@Override

@Cacheable

public List<Customers> queryLike1(String name) {

return  customersRepository.queryLike1(name);

}

@Override

@Cacheable

public List<Customers> queryLike2(String name) {

return  customersRepository.queryLike2(name);

}

@Override

@Cacheable

publiclong getCount() {

return  customersRepository.getCount();

}

@Override

@Cacheable

public List<Customers> findAll() {

returncustomersJpaRepository.findAll();

}

@Override

@Cacheable

public Customers findOne(Long id) {

returncustomersJpaRepository.findOne(id);

}

@Override

@Cacheable

publicvoid deleteAll(){

customersJpaRepository.deleteAll();

}

@Override

@Cacheable

publicvoid delete(longid){

customersJpaRepository.delete(id);

}

@Override

@Cacheable

publicvoid save(List<Customers> entities){

customersJpaRepository.save(entities);

}

@Override

@Cacheable

publicvoid save(Customers entity){

customersJpaRepository.save(entity);

}

}

8.      配置CustomersController

package com.example.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.repository.query.Param;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RestController;

import com.example.domain.Customers;

import com.example.service.CustomersService;

@RestController

@RequestMapping("/customers")

publicclass CustomersController {

@Autowired

private CustomersService customersService;

@RequestMapping(value="getCustomersByMaxId", method=RequestMethod.GET)

public Customers getCustomersByMaxId(){

returncustomersService.getCustomersByMaxId();

}

@RequestMapping(value="queryParams1/{name}/{phone}", method=RequestMethod.POST)

public List<Customers> queryParams1(String name, Integer phone){

returncustomersService.queryParams1(name, phone);

}

//http://localhost:8080/customers/queryParams2/%7Bname%7D/%7Bphone%7D?name=老赵&phone=123456

@RequestMapping(value="queryParams2/{name}/{phone}", method=RequestMethod.POST)

public List<Customers> queryParams2(@Param("name")String name, @Param("phone")Integer phone){

returncustomersService.queryParams2(name, phone);

}

@RequestMapping(value="queryLike1/{name}", method=RequestMethod.POST)

public List<Customers> queryLike1(String name){

returncustomersService.queryLike1(name);

}

//http://localhost:8080/customers/queryLike2/%7Bname%7D?name=老王

@RequestMapping(value="queryLike2/{name}", method=RequestMethod.POST)

public List<Customers> queryLike2(@Param("name")String name){

returncustomersService.queryLike2(name);

}

@RequestMapping(value="getCount", method=RequestMethod.GET)

publiclong getCount(){

returncustomersService.getCount();

}

@RequestMapping(value="findAll", method=RequestMethod.GET)

public List<Customers> findAll() {

returncustomersService.findAll();

}

@RequestMapping(value="findOne", method=RequestMethod.POST)

public Customers findOne(Long id) {

returncustomersService.findOne(id);

}

@RequestMapping(value="deleteAll", method=RequestMethod.GET)

publicvoid deleteAll(){

customersService.deleteAll();

}

@RequestMapping(value="delete", method=RequestMethod.POST)

publicvoid delete(longid){

customersService.delete(id);

}

@RequestMapping(value="saveAll", method=RequestMethod.POST)

publicvoid save(List<Customers> entities){

customersService.save(entities);

}

@RequestMapping(value="save", method=RequestMethod.POST)

publicvoid save(Customers entity){

customersService.save(entity);

}

}

9.      配置启动项DemoApplication

package com.example;

import org.springframework.boot.SpringApplication;

importorg.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cache.annotation.EnableCaching;

@SpringBootApplication

@EnableCaching

publicclass DemoApplication {

publicstaticvoid main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

//to visithttp://localhost:8080/swagger-ui.html

}

SpringData JPA示例的更多相关文章

  1. Spring、SpringMVC、SpringData + JPA 整合详解

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7759874.html ------------------------------------ ...

  2. 6.4 SpringData JPA的使用

    引言:该文档是参考尚硅谷的关于springboot教学视屏后整理而来.当然后面还加入了一些自己从网上收集整理而来的案例! 一.SpringData JPA初步使用 1. springdata简介 2. ...

  3. Springboot集成SpringData JPA

    序 StringData JPA 是微服务框架下一款ORM框架,在微服务体系架构下,数据持久化框架,主要为SpringData JPA及Mybatis两种,这两者的具体比较,本文不做阐述,本文只简单阐 ...

  4. 从一个简单的 JPA 示例开始

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

  5. springdata jpa使用Example快速实现动态查询

    Example官方介绍 Query by Example (QBE) is a user-friendly querying technique with a simple interface. It ...

  6. 【极简版】SpringBoot+SpringData JPA 管理系统

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBo ...

  7. 带你搭一个SpringBoot+SpringData JPA的环境

    前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Da ...

  8. 尚硅谷springboot学习34-整合SpringData JPA

    SpringData简介

  9. 一篇 SpringData+JPA 总结

    概述 SpringData,Spring 的一个子项目,用于简化数据库访问,支持 NoSQL 和关系数据库存储 SpringData 项目所支持 NoSQL 存储 MongDB(文档数据库) Neo4 ...

随机推荐

  1. windows客户端远程访问linux下mysql方法

    windows客户端远程访问linux下mysql方法 1. 改表法.可能是你的帐号不允许从远程登陆,只能在localhost.这个时候只要在localhost的那台电脑,登入mysql后,更改 &q ...

  2. LOJ2424 NOIP2015 子串 【DP】*

    LOJ2424 NOIP2015 子串 LINK 题目大意是给你两个序列,在a序列中选出k段不重叠的子串组成b序列,问方案数 首先我们不考虑相邻的两段,把所有相邻段当成一段进行计算 然后设dpi,j, ...

  3. BZOJ4033 HAOI2015 树上染色 【树上背包】

    BZOJ4033 HAOI2015 树上染色 Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并将其他的N-K个点染成白 ...

  4. JS 区分单击双击

    var timeout =null; $("#Btn").on("click",function(){ clearTimeout(timeout);//停止单击 ...

  5. php中strstr、strchr、strrchr、substr、stristr

    一.strstr 和 strcchr的区别 strstr   显示第一次找到,要查找的字符串,以及后面的字符串. strrchr 显示最后一次找到,要查找的字符串,以及后面的字符串. 二.strstr ...

  6. Sprint第一个冲刺(第一天)

    一.Sprint介绍 我们这次的团队项目是做<餐厅到店点餐系统>APP版,暂时不是基于用户需求来做的,但后期会进行用户需求调查,完善我们的软件.现在正在做一些前期准备,在团队合作上还缺乏一 ...

  7. DataBinder.Eval的正确使用

    本文介绍下,asp.net编程中有关DataBinder.Eval的用法,学习下asp.net DataBinder.Eval的用法,有需要的朋友参考下. 代码示例 :<%# Bind(&quo ...

  8. web 调试工具docker的安装使用

    1.   weinre 工具 docker run -d -p 8080:8080 beevelop/weinre 2. vorlonjs(不支持https)  docker run --name v ...

  9. Bootstrap组件福利篇:十二款好用的组件推荐

    阅读目录 一.时间组件 1.效果展示 2.源码说明 3.代码示例 二.自增器组件 1.效果展示 2.源码说明 3.代码示例 三.加载效果 一.实用型 二.炫酷型 四.流程图小插件 1.效果展示 2.源 ...

  10. JVM内存管理之GC简介

    为何要了解GC策略与原理?        原因在上一章其实已经有所触及,就是因为在平时的工作和研究当中,不可避免的会遇到内存溢出与内存泄露的问题.如果对GC策略与原理不了解的情况下碰到了前面所说的问题 ...