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

简介

SpringData JPA的Repository接口介绍,本文主要介绍CrudRepository、PagingAndSortingRepository、JpaSpecificationExecutor。

示例

pom.xml

<!--Springboot-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringData-JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--mysql启动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!--测试驱动-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

 entity:

/*
* 数据实体,表名test_emp
*/
@Entity
@Table(name="test_emp")
public class Emp implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column
private Integer age;
@Column
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Emp [id=" + id + ", age=" + age + ", name=" + name + "]";
}
}

CrudRepository实现:

public interface EmpCrudRepository extends CrudRepository<Emp, Integer> {
/*
*Query高级查询
*/
@Query("select e from Emp e")
public List<Emp> queryAllTest();
}

PagingAndSortingRepository实现:

public interface EmpPagingAndSortingRepository extends PagingAndSortingRepository<Emp, Integer> {

}

EmpJpaSpecificationExecutor实现:

public interface EmpJpaSpecificationExecutor extends JpaSpecificationExecutor<Emp>,Repository<Emp, Integer>{

}

 CurdRepository测试:

@SpringBootTest
@RunWith(SpringRunner.class)
public class EmpCurdRepositoryTest { @Autowired
private EmpCrudRepository empCrudRepository; @Test
public void testAdd() {
Emp emp = new Emp();
emp.setAge(22);
emp.setId(1);
emp.setName("test1");
empCrudRepository.save(emp);
} @Test
public void testAddAll() {
List<Emp> emps = new ArrayList<>();
for (int i = 0; i < 10; i++) {
Emp emp = new Emp();
emp.setAge(i+20);
emp.setName("test"+i);
emps.add(emp);
}
empCrudRepository.saveAll(emps);
} /**
* Query注解使用
*/
@Test
public void testQueryAll() {
List<Emp> emps = empCrudRepository.queryAllTest();
for(Emp emp:emps) {
System.out.println(emp);
}
}
}

  PagingAndSortingRepository测试:

@SpringBootTest
@RunWith(SpringRunner.class)
public class EmpPagingAndSortingRepositoryTest { @Autowired
private EmpPagingAndSortingRepository empPagingAndSortingRepository;
@Test
public void query() {
Pageable pageable = PageRequest.of(0, 10, Direction.DESC, "id");
Iterable<Emp> emps = empPagingAndSortingRepository.findAll(pageable);
for(Emp emp:emps) {
System.out.println(emp);
}
} @Test
public void queryAll() {
Pageable pageable = PageRequest.of(0, 7, Direction.DESC, "id");
Page<Emp> result = empPagingAndSortingRepository.findAll(pageable); //查询结果是pageable对象
// Iterable<Emp> emps = empPagingAndSortingRepository.findAll(pageable); //查询结果直接是emp对象
System.out.println(result.getContent());
System.out.println(result.getNumber());
System.out.println(result.getNumberOfElements());
System.out.println(result.getTotalElements());
System.out.println(result.getTotalPages());
for(Emp emp:result.getContent()) {
System.out.println(emp);
}
}
}

  JpaSpecificationExecutor测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class EmpJpaSpecificationExecutorTest { @Autowired
private EmpJpaSpecificationExecutor empJpaSpecificationExecutor; @Test
public void test() {
Specification<Emp> spec = new Specification<Emp>() {
@Override
//多种复杂条件组合查询,属于JPA高级
public Predicate toPredicate(Root<Emp> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> predicates = new ArrayList<>();
Predicate p1 = cb.gt(root.get("age"), 25);
Predicate p2 = cb.lt(root.get("age"), 28);
Predicate p3 = cb.and(p1,p2);
predicates.add(p3);
return query.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
}
}; Pageable pageable = PageRequest.of(0, 5, Direction.ASC, "id"); Page<Emp> emps = empJpaSpecificationExecutor.findAll(spec, pageable);
for (Emp emp: emps.getContent()) {
System.out.println(emp);
} }
}

  

Springboot集成SpringData JPA的更多相关文章

  1. SpringBoot整合SpringData JPA入门到入坟

    首先创建一个SpringBoot项目,目录结构如下: 在pom.xml中添加jpa依赖,其它所需依赖自行添加 <dependency> <groupId>org.springf ...

  2. SpringBoot集成jdbcTemplate/JPA

    1.pom.xml <!-- jdbcTemplate 依赖 --> <dependency> <groupId>org.springframework.boot& ...

  3. Spring Data JPA系列2:SpringBoot集成JPA详细教程,快速在项目中熟练使用JPA

    大家好,又见面了. 这是Spring Data JPA系列的第2篇,在上一篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring Data JPA,傻傻分不清楚?给你个 ...

  4. SpringBoot图文教程12—SpringData Jpa的基本使用

    有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...

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

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

  6. 6.4 SpringData JPA的使用

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

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

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

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

    SpringData简介

  9. 第11章—使用对象关系映射持久化数据—SpringBoot+SpringData+Jpa进行查询修改数据库

    SpringBoot+SpringData+Jpa进行查询修改数据库 JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分.但它又不限于EJB 3.0,你可以在Web应用.甚至桌面应用 ...

随机推荐

  1. TOJ2470

    #include <stdio.h> struct node{ int x; int y; int step; }first; int zx[4]={-1,0,1,0}; int zy[4 ...

  2. 670. Maximum Swap

    Given a non-negative integer, you could swap two digits at most once to get the maximum valued numbe ...

  3. Cassandra的数据模型

    Cassandra的数据模型可以理解为嵌套的Map,在Cassandra中数据类型主要有四种:Column,SuperColumn,ColumnFamily,Keyspace.下面分别介绍这几种类型. ...

  4. iOS下载图片失败

    一.具体问题 开发的过程中,发现某个界面部分图片的显示出现了问题只显示占位图片,取出图片的url在浏览器却是能打开的,各种尝试甚至找同行的朋友帮忙在他们项目里展示都会存在问题,最终发现通过第三方框架S ...

  5. IQKeyboardManager 问题锦集

    Keep UINavigationBar at the top (Don't scroll with keyboard) (#21, #24) If you don't want to hide th ...

  6. (转) python学习笔记6--fraction

    原文:https://blog.csdn.net/lemonwyc/article/details/37592883 fraction模块提供有关有理数的算术表达和计算,实际上就是分数的表达和计算.p ...

  7. js设置全局变量 ajax中赋值

    js设置全局变量,在ajax中给予赋值赋值不上问题解决方案 方案一. //在全局或某个需要的函数内设置Ajax异步为false,也就是同步. $.ajaxSetup({async : false}); ...

  8. 部署nexus服务

    一.安装和启动 官网下载nexus-2.12安装包,地址:https://sonatype-download.global.ssl.fastly.net/nexus/oss/nexus-2.12.0- ...

  9. springboot自定义错误页面

    springboot自定义错误页面 1.加入配置: @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { re ...

  10. CentOS 配置使用 EPEL YUM 源

    EPEL(Extra Packages for Enterprise Linux)是一个由特别兴趣小组创建.维护并管理的,针对 红帽企业版 Linux(RHEL)及其衍生发行版(比如 CentOS. ...