Springboot集成SpringData JPA

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);
		}

	}
}

  

原文地址:https://www.cnblogs.com/pengteng/p/10180516.html

时间: 2024-11-07 18:49:34

Springboot集成SpringData JPA的相关文章

SpringBoot整合SpringData JPA

springboots使用的版本是2.0.1,注意不同版本可能有差异,并不一定通用 添加Spring Data JPA的起步依赖: <!-- springBoot JPA的起步依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependen

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

前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的.SpringBoot和SpringData JPA的好处我就不说了,当时我学习的时候也粗略做过笔记,有兴趣的同学可以去看看 SpringBoot就是这么简

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

SpringData简介 SpringData JPA的目的是统一各种关系数据库的操作,底部用了Hibernate对JPA的实现 整合SpringData JPA JPA:ORM(Object Relational Mapping): 1).编写一个实体类(bean)和数据表进行映射,并且配置好映射关系: //使用JPA注解配置映射关系 @Entity //告诉JPA这是一个实体类(和数据表映射的类) @Table(name = "tbl_user") //@Table来指定和哪个数据

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

前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBoot+SpringData JPA的环境,测试接口的时候也成功获取得到数据了. 带你搭一个SpringBoot+SpringData JPA的Demo 我的目的是做一个十分简易的管理系统,这就得有页面,下面我继续来讲讲我是怎么快速搭一个管理系统的. ps:由于是简易版,我的目的是能够快速搭建,而不在

SpringData JPA实现CRUD,分页与多参数排序

Spring Data 项目的目的是为了简化构建基于 Spring 框架应用的数据访问计数,包括非关系数据库.Map-Reduce 框架.云数据服务等等,SpringData JPA是简化创建 JPA 数据访问层和跨存储的持久层功能,通过一个接口的继承即可实现简单的CRUD. 数据库的连接与项目的构建不说了,可以参考:springboot实战SpringDataJPA.我采用的是eclipse构建的普通的springboot项目. 一.创建表与实体类映射 @Entity @Table(name

springboot集成mybatis进行开发

1.首先创建springboot项目 点击:http://start.spring.io/  可以在线创建springboot项目 2.加入mybatis的pom文件 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.4</version

SpringData JPA查询分页demo

SpringData JPA 的 PagingAndSortingRepository接口已经提供了对分页的支持,查询的时候我们只需要传入一个 org.springframework.data.domain.Pageable 接口的实现类,指定PageNumber和pageSize即可 springData包中的 PageRequest类已经实现了Pageable接口,我们可以直接使用下边是部分代码: DAO: package com.jiaoyiping.jdjy.sourcecode.dao

SpringBoot集成MyBatis的分页插件PageHelper

俗话说:好??不吃回头草,但是在这里我建议不管你是好马还是不好马,都来吃吃,带你复习一下分页插件PageHelper. 昨天给各位总结了本人学习springboot整合mybatis第一阶段的一些学习心得和源码,主要就算是敲了一下SpringBoot的门儿,希望能给各位的入门带给一点儿捷径,今天给各位温习一下MyBatis的分页插件PageHelper和SpringBoot的集成,它的使用也非常简单,开发更为高效.因为PageHelper插件是属于MyBatis框架的,所以相信很多哥们儿都已经用

springboot集成swagger2构建RESTful API文档

在开发过程中,有时候我们需要不停的测试接口,自测,或者交由测试测试接口,我们需要构建一个文档,都是单独写,太麻烦了,现在使用springboot集成swagger2来构建RESTful API文档,可以在访问接口上,直接添加注释 先介绍一下开发环境: jdk版本是1.8 springboot的版本是1.4.1 开发工具为 intellij idea 我们先引入swagger2的jar包,pom文件引入依赖如下: <dependency> <groupId>io.springfox&