一、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. ARM系统架构

    ARM系统架构 一.ARM概要 ARM架构,曾称进阶精简指令集机器(Advanced RISC Machine)更早称作Acorn RISC Machine,是一个32位精简指令集(RISC)处理器架 ...

  2. https://www.jianshu.com/writer#/notebooks/164311/notes/88906048/preview

    什么是 webassembly 在 2019 年 12 月之前,如果你要编写一个web页面,那一定离不开 html.css.js 这三个好兄弟.在 2019 年 12 月之后 W3C 宣布 webas ...

  3. TcaplusDB祝大家端午安康!

    "五月五,端午到,赛龙舟,真热闹.吃粽子,带香包,蚊虫不来身边闹."这首脍炙人口.描绘着端午节风俗的儿歌,想必大家都听过. 每年的农历五月初五,是我国四大传统节日(春节.清明节.端 ...

  4. httprunner 2.5.7 下.env 文件环境变量的使用及debugtalk的使用,对test的参数化及执行

    一.httprunner 2.5.7 下.env  文件的使用 1..env 文件配置如下: 2.debugtalk.py 编写如下: 在debugtalk.py中增加开始和结束执行语句: 3.需要做 ...

  5. JUC 并发编程--06, 阻塞队列(7种), 阻塞等待 api的 代码验证

    这些队列的 api ,就是添加队列,出队列,检测对首元素, 由于 add()--remove(), offer()--poll(),太简单这里不做验证, 只验证后二组api: 阻塞等待( put()- ...

  6. WebRTC 传输安全机制第二话:深入显出 SRTP 协议

    通过 DTLS 协商后,RTC 通信的双方完成 MasterKey 和 MasterSalt 的协商.接下来,我们继续分析在 WebRTC 中,如何使用交换的密钥,来对 RTP 和 RTCP 进行加密 ...

  7. 【NX二次开发】Block UI 集列表

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

  8. 【C++】Vector判断元素是否存在,去重,求交集,求并集

    1 #include <iostream> 2 #include <vector> 3 #include <algorithm> //sort函数.交并补函数 4 ...

  9. 【NX二次开发】获得屏幕矩阵并设置WCS为屏幕方向

    说明:获得屏幕矩阵并设置WCS为屏幕方向(Z朝向自己,X轴朝右,Y轴超上). 方法: 1 extern DllExport void ufusr(char *param, int *retcode, ...

  10. 【曹工杂谈】Mysql客户端上,时间为啥和本地差了整整13个小时,就离谱

    瞎扯一点非技术 本来今天上午就打算写的,结果中途被别的事吸引了注意力,公司和某保险公司合作推了一个医疗保险,让我们给父母买,然后我研究了半天条款:又想起来之前买的支付宝那个好医保,也买了两年多了,但是 ...