一、Spring Data Jpa简介

JPA(Java Persistence API)定义了一系列对象持久化的标准,目前实现这一规范的产品有Hibernate、TopLink等。

Spring Data JPA 框架,主要针对的就是 Spring 唯一没有简化到的业务逻辑代码,至此,开发者连仅剩的实现持久层业务逻辑的工作都省了,唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!

二、Spring Data Jpa  基本 crud  实现

基本crud很简单,只要dao层接口继承JpaRepository即可,然后就可以使用相关api

server:
port: 8080
servlet:
context-path: /springtest02
spring:
datasource:
driver-class-name: oracle.jdbc.driver.OracleDriver
url: jdbc:oracle:thin:@192.168.12.84:1521/test
username: test
password: test
jpa:
show-sql: true
@Entity
@Table(name="t_rdb")
public class Rdb {
@Id
private int t_id;
private String name;
private String pwd;
private int age;
public int getT_id() {
return t_id;
}
public void setT_id(int t_id) {
this.t_id = t_id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package top.ruandb.dao;
import org.springframework.data.jpa.repository.JpaRepository; import top.ruandb.entity.Rdb; public interface RdbDao extends JpaRepository<Rdb,Integer>{ }
package top.ruandb;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.web.bind.annotation.RequestMapping;
import top.ruandb.dao.RdbDao;
import top.ruandb.entity.Rdb;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Springtest02ApplicationTests {
@Autowired
private RdbDao rdbDao;
//增加
@Test
public void save() {
Rdb r = new Rdb();
r.setT_id(2);
r.setName("rdb");
r.setPwd("123");
r.setAge(18);
rdbDao.save(r);
}
//修改
@Test
public void update() {
Rdb r = new Rdb();
r.setT_id(2);
r.setName("rdb");
r.setPwd("123");
r.setAge(19);
rdbDao.save(r);
}
//删除
@Test
public void delete() {
rdbDao.deleteById(1);
}
//查询
@Test
public void find() {
List<Rdb> l =rdbDao.findAll();
for(Rdb r : l) {
System.out.println(r.getName());
}
} }

三、自定义查询@Query

@Query注解可以直接通过写sql来查询数据,分为两种

1)hql

@Query(value = "select name,author,price from Book b where b.price>?1 and b.price<?2")
List<Book> findByPriceRange(long price1, long price2); @Query(value = "select name,author,price from Book b where b.name like %:name%")
List<Book> findByNameMatch(@Param("name") String name);

2)本地sql

所谓本地sql查询,就是使用原生的sql语句(根据数据库的不同,在sql的语法或结构方面可能有所区别)进行查询数据库的操作。

@Query(value = "select * from book b where b.name=?1", nativeQuery = true)
List<Book> findByName(String name);

四、动态查询 Specification

通常业务场景中有很多条件是组合插叙的,这就需要用到动态查询

要实现动态查询dao接口除了继承JpaRepository,还要继承JpaSpecificationExecutor。

public interface RdbDao extends JpaRepository<Rdb,Integer>,JpaSpecificationExecutor<Rdb>{
@Query("select r from Rdb r where r.name=?1")
public List<Rdb> findByName(String name); @Query(value="select * from t_rdb",nativeQuery=true)
public List<Rdb> frndAll();
}
@SuppressWarnings("serial")
@Test
public void findAll() {
Rdb rdb = new Rdb();
rdb.setName("b");
List<Rdb> l = rdbDao.findAll(new Specification<Rdb>() {
@Override
public Predicate toPredicate(Root<Rdb> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate predicate = cb.conjunction();
if (rdb != null) {
// like条件
if (rdb.getName() != null && !rdb.getName().equals(" ")) {
predicate.getExpressions().add(cb.like(root.get("name"),
"%" + rdb.getName().trim() + "%"));
}
// 等于条件
if (rdb.getT_id() > 0) {
predicate.getExpressions().add(cb.equal(root.get("t_id"),
rdb.getT_id()));
}
// 大于条件(大于10岁)
predicate.getExpressions().add(cb.gt(root.get("age"), 10));
// 小于条件(小于20岁)
predicate.getExpressions().add(cb.lt(root.get("age"), 20));
}
return predicate;
}
});
for (Rdb r : l) {
System.out.println(r.toString());
} }

SpringBoot总结之Spring Data Jpa的更多相关文章

  1. SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法

    软件152 尹以操 首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml ...

  2. SpringBoot系列之Spring Data Jpa集成教程

    SpringBoot系列之Spring Data Jpa集成教程 Spring Data Jpa是属于Spring Data的一个子项目,Spring data项目是一款集成了很多数据操作的项目,其下 ...

  3. SpringBoot入门:Spring Data JPA 和 JPA(理论)

    参考链接: Spring Data JPA - Reference Documentation Spring Data JPA--参考文档 中文版 纯洁的微笑:http://www.ityouknow ...

  4. springboot(五):spring data jpa的使用

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

  5. SpringBoot(五) :spring data jpa 的使用

    原文出处: 纯洁的微笑 在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法 ...

  6. spring-boot (三) spring data jpa

    学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...

  7. Spring data jpa 实现简单动态查询的通用Specification方法

    本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...

  8. Springboot 系列(十)使用 Spring data jpa 访问数据库

    前言 Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对 ...

  9. 展开被 SpringBoot 玩的日子 《 五 》 spring data jpa 的使用

    在上篇文章< 展开被 SpringBoot 玩的日子 < 二 >WEB >中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring da ...

随机推荐

  1. TensorFlow多元线性回归实现

    多元线性回归的具体实现 导入需要的所有软件包:   因为各特征的数据范围不同,需要归一化特征数据.为此定义一个归一化函数.另外,这里添加一个额外的固定输入值将权重和偏置结合起来.为此定义函数 appe ...

  2. RGB-D对红外热像仪和毫米波雷达标定

    RGB-D对红外热像仪和毫米波雷达标定 Extrinsic Calibration of Thermal IR Camera and mmWave Radar by Exploiting Depth ...

  3. 使用PCAST检测散度以比较GPU和CPU结果

    使用PCAST检测散度以比较GPU和CPU结果 并行编译器辅助软件测试(PCAST)是英伟达HPC FORTRAN.C++和C编译器中的一个特性.PCAST有两个用例.一个新的处理器或新的编译程序的部 ...

  4. python_selenium_键盘事件

    引言 ----在实际的web测试工作中,需要配合键盘按键来操作,webdriver的  keys()类提供键盘上所有按键的操作,还可以模拟组合键Ctrl+a,Ctrl+v等. 举例: #cording ...

  5. 面试官就是要问我SpringMVC的源码,差点顶不住!

    <对线面试官>系列目前已经连载22篇啦!有深度风趣的系列! [对线面试官]Java注解 [对线面试官]Java泛型 [对线面试官] Java NIO [对线面试官]Java反射 & ...

  6. Linkerd 2.10(Step by Step)—4. 如何配置外部 Prometheus 实例

    Linkerd 2.10 系列 快速上手 Linkerd v2 Service Mesh(服务网格) 腾讯云 K8S 集群实战 Service Mesh-Linkerd2 & Traefik2 ...

  7. 【NX二次开发】Block UI 指定平面

    属性说明 属性   类型   描述   常规           BlockID    String    控件ID    Enable    Logical    是否可操作    Group    ...

  8. Java JDK 动态代理(AOP)使用及实现原理分析

    一.什么是代理? 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 代理模式U ...

  9. Vim一直学不会?试试这个 "真香" 神器

    Vim 的使用,一直以来是一个难题 以至于国外的知名程序员问答社区 StackOverFlow 上有一个问题 How to I exit the Vim editor 获得了超过 200万次的浏览量 ...

  10. Springboot自定义starter打印sql及其执行时间

    前面写到了通过实现mybatis提供的org.apache.ibatis.plugin.Interceptor接口实现了打印SQL执行时间,并格式化SQL及其参数,如果我们使用的是ssm还得再配置文件 ...