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);
} }
}
Springboot集成SpringData JPA的更多相关文章
- SpringBoot整合SpringData JPA入门到入坟
首先创建一个SpringBoot项目,目录结构如下: 在pom.xml中添加jpa依赖,其它所需依赖自行添加 <dependency> <groupId>org.springf ...
- SpringBoot集成jdbcTemplate/JPA
1.pom.xml <!-- jdbcTemplate 依赖 --> <dependency> <groupId>org.springframework.boot& ...
- Spring Data JPA系列2:SpringBoot集成JPA详细教程,快速在项目中熟练使用JPA
大家好,又见面了. 这是Spring Data JPA系列的第2篇,在上一篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring Data JPA,傻傻分不清楚?给你个 ...
- SpringBoot图文教程12—SpringData Jpa的基本使用
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- 带你搭一个SpringBoot+SpringData JPA的环境
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 不知道大家对SpringBoot和Spring Da ...
- 6.4 SpringData JPA的使用
引言:该文档是参考尚硅谷的关于springboot教学视屏后整理而来.当然后面还加入了一些自己从网上收集整理而来的案例! 一.SpringData JPA初步使用 1. springdata简介 2. ...
- 【极简版】SpringBoot+SpringData JPA 管理系统
前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 在上一篇中已经讲解了如何从零搭建一个SpringBo ...
- 尚硅谷springboot学习34-整合SpringData JPA
SpringData简介
- 第11章—使用对象关系映射持久化数据—SpringBoot+SpringData+Jpa进行查询修改数据库
SpringBoot+SpringData+Jpa进行查询修改数据库 JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分.但它又不限于EJB 3.0,你可以在Web应用.甚至桌面应用 ...
随机推荐
- php 向二维数组中追加元素
处理之前的数据: 处理后: //$consult 为往里插之前的数组 //把$arr的元素追加到$consult的最前面 $arr = []; $arr[0]['workplaceId'] = '0' ...
- 访问www.baidu.com后会发生什么(一次完整的网络通讯过程)
1.在浏览器中输入www.baidu.com 这意味着浏览器要向百度发送一个网页数据包,要发送数据包,需要知道对方的IP地址,这里我们只知道网址为www.baidu.com,却不知道IP地址,此时应用 ...
- C# 后缀名
用Visual Studio进行开发时项目内会有很多文件,其中常见的文件名后缀及其功能如下: .sln:解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需的信息. .csproj:项目文 ...
- 抓取出现时间3s后消失的元素
背景:日常自动化脚本编写中,可能需要定位,获取元素的位置,通常会遇到一种元素,只出现几秒,几秒后慢慢消失的,这个时候,如果要抓取这个提示,如果和它比手速,当你手速比较快,可以箭头抓取到,但当这个元素的 ...
- Git&GitHub学习日志
Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理. Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件.作为一个 ...
- dubbo学习(1)--简单的入门搭建实例
转载请注明源文出处:http://www.cnblogs.com/lighten/p/6828026.html 1 简介 dubbo是一个分布式服务框架,由阿里巴巴的工程师开发,致力于提供高性能和透明 ...
- WINDOWS 下 修改APACHE 并发数
某次,配置大型站点.日IP过2W. 刚解析完,就特别卡,每个页面都是慢吞吞的打开的. 至少30秒.但是,3389进入服务器很快,CPU 内存都是几乎为0. 想到WINDOWS下使用的是APACHE,并 ...
- Linux 上安装 Couchbase服务
down: http://www.couchbase.com/downloads/ doc: http://docs.couchbase.com/archive-index/ forums: htt ...
- 浅谈Android Studio中项目结构中project模式的各个文件和文件夹
致敬郭霖,这些知识是从第一行代码第二版中直接码下来的,谢谢他,注意每个条目前是否有. 1..gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一些文件,我们无需关心 ...
- Android开发之漫漫长途 Ⅲ——Activity的显示之Window和View(2)
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...