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应用.甚至桌面应用 ...
随机推荐
- C博客作业03—函数
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1 学习体会 知道了程序的模块化设计可使程序结构清晰,简化复杂问题,解决代码重复问题 学会使用自定义函数简化主函数,使代码 ...
- python 十进制 和 IP 地址互转
#! /bin/python def ip2decimalism(ip): dec_value = 0 v_list = ip.split('.') v_list.reverse() t = 1 fo ...
- jzoj5710
對於每個詢問,我們先考慮插入1~r中每個數的答案,這樣子就不用考慮後面數對現在的影響 那麼我們可以在權值線段樹的每一個位置存儲每一個值最後一次結束的位置 問題變成了,如何判斷區間連續? 我們可以對線段 ...
- [JavaScript] 获取数组中相同元素的个数
/** * 获取数组中相同元素的个数 * @param val 相同的元素 * @param arr 传入数组 */ function getSameNum(val,arr){ processArr ...
- 二:maven构建module
通常情况下,我们一个项目是需要分多个模块的,这是我们用maven管理项目就需要构建一个多模块的项目: 通常的结构是一个模块中有一个主项目,下面包含多个子项目,如果是web项目则子项目中有一个是java ...
- jvm(1)类的加载(二)(自定义类加载器)
[深入Java虚拟机]之四:类加载机制 1,从Java虚拟机的角度,只存在两种不同的类加载器: 1,启动类加载器:它使用C++实现(这里仅限于Hotspot,也就是JDK1.5之后默认的虚拟机,有其他 ...
- 【learning】微信跳一跳辅助c++详解 轻松上万 【上】
写在前面 17年年底Wechat出了这个跳一跳的小游戏,今年2月份的时候简单地玩了一下,发现被游戏虐了(手太残了只能跳20多). 今天刚好有点空,于是就花了一个下午的时间写了一个跳一跳的c++ ...
- chrome下uploadify导致页面崩溃
解决方法在初始化uploadify之前用timeout来延迟加载 $(function(){ setTimeout(function(){ $('#file_upload'). ...
- Found an unexpected Mach-O header code: 0x72613c21
在按照第三方sdk文档中的Emedded Binaries 中加入了他们的framework,在删除这下面的对应的framework后,问题就得到了解决 发下有个英文的页面也是涉及这个问题的, 描述的 ...
- iOS自动布局框架-Masonry详解
首先,在正式使用Masonry之前,我们先来看看在xib中我们是如何使用AutoLayout 从图中我们可以看出,只要设置相应得局限,控制好父视图与子视图之间的关系就应该很ok的拖出你需要的需 ...