SpringBoot总结之Spring Data Jpa
一、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的更多相关文章
- SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法
软件152 尹以操 首先谢谢大佬的简书文章:http://www.jianshu.com/p/45ad65690e33# 这篇文章中讲的是spring中使用spring data jpa,使用了xml ...
- SpringBoot系列之Spring Data Jpa集成教程
SpringBoot系列之Spring Data Jpa集成教程 Spring Data Jpa是属于Spring Data的一个子项目,Spring data项目是一款集成了很多数据操作的项目,其下 ...
- SpringBoot入门:Spring Data JPA 和 JPA(理论)
参考链接: Spring Data JPA - Reference Documentation Spring Data JPA--参考文档 中文版 纯洁的微笑:http://www.ityouknow ...
- springboot(五):spring data jpa的使用
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...
- SpringBoot(五) :spring data jpa 的使用
原文出处: 纯洁的微笑 在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法 ...
- spring-boot (三) spring data jpa
学习文章来自:http://www.ityouknow.com/spring-boot.html spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence ...
- Spring data jpa 实现简单动态查询的通用Specification方法
本篇前提: SpringBoot中使用Spring Data Jpa 实现简单的动态查询的两种方法 这篇文章中的第二种方法 实现Specification 这块的方法 只适用于一个对象针对某一个固定字 ...
- Springboot 系列(十)使用 Spring data jpa 访问数据库
前言 Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对 ...
- 展开被 SpringBoot 玩的日子 《 五 》 spring data jpa 的使用
在上篇文章< 展开被 SpringBoot 玩的日子 < 二 >WEB >中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring da ...
随机推荐
- NVIDIA数据中心深度学习产品性能
NVIDIA数据中心深度学习产品性能 在现实世界的应用程序中部署AI,需要训练网络以指定的精度融合.这是测试AI系统的最佳方法-准备将其部署在现场,因为网络随后可以提供有意义的结果(例如,对视频流正确 ...
- HiCar SDK概述
HiCar SDK概述 HUAWEI HiCar SDK 是 HUAWEI HiCar(以下简称 HiCar )为汽车硬件设备提供的软件开发工具包,为汽车硬件厂商接入 HiCar 提供应用 API 接 ...
- ISP算法高水平分析(上)
ISP算法高水平分析(上) 一.ISP基本框架及算法介绍 ISP是Image Signal Processor的缩写,全称是影像处理器.在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始 ...
- mybatis学习——properties属性实现引用配置文件
Mybatis核心配置文件中有很多的配置项,配置文档的顶层结构如下: *注意:配置项的顺序不能颠倒,如果颠倒了它们的顺序,在MyBatis的自启动阶段会发生异常,导致程序无法运行. propertie ...
- JAVA面向对象详细总结
面向对象概念 所有操作基于对象进行操作实现 面向对象的三大特征 封装.继承.多态 类:具有相同特征和行为物体的统称 在java中类的定义语法: [修饰符] class 类名{ 属性 ...
- Java如何使用while和for嵌套循环控制输出数据,使数据奇偶行不同
/* 题目1 使用Eclipse编写控制台应用程, 使用while循环在控制台打印10行10列的如下图形 □ □ □ □ □ □ □ □ □ □ ■ ■ ■ ■ ■ ■ ■ ■ ■ ■ □ □ □ □ ...
- 2021年Wordpress博客搭建
2021年WordPress博客搭建教程 这是一篇关于2021最新版的WP个人博客搭建教程.整篇文章会事无巨细的一步步讲述搭建博客的每一步. 0.前言 随着互联网和移动互联网的飞速发展,博客这一功能恍 ...
- klayout安装及使用教程
klayout 版本:klayout-0.26.9 我的系统环境:Deepin20(可以视为Debian) 修改过的代码地址:https://github.com/stuartofmine/klayo ...
- 使用VS code编写C++无法实时检测代码的解决办法
更新:其实微软是有官方文档配置VS code 的C++的.地址是: https://code.visualstudio.com/docs/cpp 更改工作区后就发现不能再使用VS CODE愉快地写C+ ...
- ES6中的新数据类型——Symbol
今天小编和大家来聊一聊es6中新增的一个原始数据类型Symbol.在es5中原始数据类型(基本数据类型)有以下六种:Undefind.Null.Bool. String.Number.Object.今 ...