SpringData JPA示例
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示例的更多相关文章
- Spring、SpringMVC、SpringData + JPA 整合详解
原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7759874.html ------------------------------------ ...
- 6.4 SpringData JPA的使用
引言:该文档是参考尚硅谷的关于springboot教学视屏后整理而来.当然后面还加入了一些自己从网上收集整理而来的案例! 一.SpringData JPA初步使用 1. springdata简介 2. ...
- Springboot集成SpringData JPA
序 StringData JPA 是微服务框架下一款ORM框架,在微服务体系架构下,数据持久化框架,主要为SpringData JPA及Mybatis两种,这两者的具体比较,本文不做阐述,本文只简单阐 ...
- 从一个简单的 JPA 示例开始
本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例:接着重构该示例,并引入 Sp ...
- springdata jpa使用Example快速实现动态查询
Example官方介绍 Query by Example (QBE) is a user-friendly querying technique with a simple interface. It ...
- 【极简版】SpringBoot+SpringData JPA 管理系统
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBo ...
- 带你搭一个SpringBoot+SpringData JPA的环境
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Da ...
- 尚硅谷springboot学习34-整合SpringData JPA
SpringData简介
- 一篇 SpringData+JPA 总结
概述 SpringData,Spring 的一个子项目,用于简化数据库访问,支持 NoSQL 和关系数据库存储 SpringData 项目所支持 NoSQL 存储 MongDB(文档数据库) Neo4 ...
随机推荐
- ranch分析学习(三)
接着上一篇继续研究 上一篇结尾的时候,我们谈到了连接,监听两个监督树,今天我们就来看看这两个监督树和他们的工作者都是干什么的,怎么实现的.文件编号接上篇. 6. ranch_acceptors_sup ...
- HDU2037 今年暑假不AC
解题思路:贪心问题,关键突破口是,先将节目的结束时间 从小到大排个序,然后依次判断后面一个节目的开始时间 是否大于或等于前一个符合条件的节目的结束时间.见代码: #include<cstdio& ...
- Loj 2047 伪光滑数
Loj 2047 伪光滑数 正解较复杂,但这道题其实可以通过暴力解决. 预处理出 \(128\) 内的所有质数,把 \(n\) 内的 \(prime[i]^j\) 丢进堆中,再尝试对每个数变形,除一个 ...
- vmware linux nat模式设置静态ip
网上资料很多,但是都不怎么实用,这里给大家总结一下.nat模式上网.因为nat本身就能上网为什么还要设置ip.这有点自找麻烦.但是在集群这是必须的.要么你搭建伪分布,要么至少具有三台物理机器.为了节省 ...
- globalalloc、malloc和new的区别
简单来说: malloc是c分配内存的库函数,new是c++分配内存的操作符,而globalalloc是win32提供的分配内存的API malloc不能自动调用构造和析构函数,在c++中没什么实用价 ...
- 4.JMeter聚合报告分析
1.Label:每个Jmeter的element的Name值 2.Samples:发出的请求数量 3.Average:平均响应时间 4.Median:表示50%用户的响应时间 5.90%Line:90 ...
- python中高阶函数学习笔记
什么是高阶函数 变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数 def fun(x, y, f): print f(x), f(y) fun ...
- jquery 操作单选按钮
<input type="radio" name="sex" value="男" />男 <input type=&quo ...
- Mybatis数据的增删改查
数据: Student{id int,name String ,age int} 配置mybatis-config.xml <?xml version="1.0" encod ...
- 算法提高 P1001【大数乘法】
当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法.具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果 ...