这里是一个学习过程笔记的汇总:Spring Boot学习汇总
1、什么是jpa?
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
ORM映射元数据:
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
API:
用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
查询语言:
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
2、什么是spring data jpa?
看名字,就知道和spring 有关,没错,spring data jpa是spring 对jpa的整合,使用spring data jpa就可以拥有jpa相关的所有功能。
spring data jpa的核心概念:
- Repository:最顶层的接口,是一个空的接口,目的是为了统一所有Repository的类型,且能让组件扫描的时候自动识别。
- CrudRepository :是Repository的子接口,提供CRUD的功能
- PagingAndSortingRepository:是CrudRepository的子接口,添加分页和排序的功能
- JpaRepository:是PagingAndSortingRepository的子接口,增加了一些实用的功能,比如:批量操作等。
- JpaSpecificationExecutor:用来做负责查询的接口
- Specification:是Spring Data JPA提供的一个查询规范,要做复杂的查询,只需围绕这个规范来设置查询条件即可
3、开始创建整合的案例
这个案例创建过程参考上一篇:Spring Boot整合Mybatis
3.1、快速创建spring boot项目,选择web,jpa,mysql模块,这个过程就省略
3.2、修改主配置文件,添加数据库连接相关参数。
### database ###
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_test?characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=yjx941001
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
3.3、数据库创建user表,参考上一篇。
3.4、创建User实体类:
package com.example.jpa.domain;
import javax.persistence.*;
import java.io.Serializable;
/**
* @author pavel
* @date 2018/11/20 0020
*/
@Entity
@Table(name = "user")
public class User implements Serializable {
private static final long serialVersionUID = -5974243692729544683L;
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@Column(name = "age")
private Integer age;
@Column(name = "name")
private String name;
public Long getId() {
return id;
}
public void setId(Long 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 "User{" +
"id=" + id +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
3.5、创建dao层,这里的UserDao接口继承JpaRepository和JpaSpeciaficationExecutor接口,拥有基本的curd,分页,排序功能
package com.example.jpa.dao;
import com.example.jpa.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
/**
* @author pavel
* @date 2018/11/20 0020
*/
public interface UserDao extends JpaRepository<User, Long>, JpaSpecificationExecutor<User> {
}
3.6、创建service,这里就写一个查询列表的方法。
package com.example.jpa.service;
import com.example.jpa.dao.UserDao;
import com.example.jpa.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author pavel
* @date 2018/11/20 0020
*/
@Service
public class UserService {
@Autowired
private UserDao userDao;
public List<User> findAll() {
return userDao.findAll();
}
}
3.7、测试,我们打印列表中user的详细信息
package com.example.jpa;
import com.example.jpa.domain.User;
import com.example.jpa.service.UserService;
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 java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaApplicationTests {
@Autowired
private UserService userService;
@Test
public void contextLoads() {
List<User> list = userService.findAll();
list.forEach(user -> {
System.out.println(user);
});
}
}
看控制台输出:
到此,spring boot整合spring data jpa的案例就结束了,其他的curd相关api可以自己测试一下。