SpringData JPA的整合
一、SpringData概述:
- Spring Data:Spring的一个子项目。用于简化数据库访问,支持NoSQL和关系型存储。其主要目的是使得数据的访问变得更加方便和快捷;
- SpringData项目所支持NoSQL存储:
- MongoDB(文档数据库)
- Neo4j(图形数据库)
- Redis(键/值存储)
- Hbase(列族数据库)
- SpringData项目所支持的关系数据存储技术:
- JDBC
- JPA
- Redis
- MongoDB
二、JPA Spring Data 概述:
- JPA Spring Data : 致力于减少数据访问层 (DAO) 的开发量. 开发者唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!
- 框架怎么可能代替开发者实现业务逻辑呢?比如:当有一个 UserDao.findUserById() 这样一个方法声明,大致应该能判断出这是根据给定条件的 ID 查询出满足条件的 User 对象。Spring Data JPA 做的便是规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。
三、SpringData怎么来统一API对数据访问层的操作呢?Repository接口
- 统一的接口
- 基于乐观锁机制接口
- 基于基本的CRUD操作
- 基于CRUD的分页操作
- 还提供数据访问的模板类:xxxTemplate
四、SpringData和JPA的整合:
1)、建一个实体类,放在entity包下面:
package com.example.demojpa.entity;
import javax.persistence.*;
//这是一个实体类
@Entity
@Table(name="tbl_user") //如果默认不添加那么使用类名作为表name
public class User {
@Id //这是一个主键
@GeneratedValue(strategy = GenerationType.IDENTITY) // 自增主键
private Integer id;
@Column(name="last_name",length = 50) //这是和数据表对应的一个列
private String lastName;
@Column //省略的话就是属性名
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
2)、编写一个Dao接口来操作实体类对应的数据表(Repository)
//继承JpaRepositroy来完成数据库的操作,传入两个泛型:一个是要操作的实体类,一个是该实体类的主键类型
public interface UserRepository extends JpaRepository<User,Integer> {
}
3)、基本的配置JpaProperties
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://47.97.192.241:3307/jpadata?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=false
driver-class-name: com.mysql.jdbc.Driver
jpa:
hibernate:
# 更新或者创建数据表
ddl-auto: update
# 控制台显示SQL
show-sql: true
4)、写一个Controller来接收请求:
package com.example.demojpa.Controller;
import com.example.demojpa.entity.User;
import com.example.demojpa.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.Optional;
@RestController
public class UserController {
@Autowired
UserRepository userRepository;
@GetMapping("/user/{id}")
public User getUser(@PathVariable("id") Integer id){
User user = userRepository.findById(id).get();
return user;
}
@GetMapping("/user")
public User insertUser(User user){
User user1=userRepository.save(user);
return user1;
}
}
我们可以看到在Repositroy下已经存在了增删改查的方法,我们只需要传入参数即可。
5)、启动项目:
首先我们的数据库里没有表:
启动项目后:
自动生成我们之前设置了table注解的表名。
我们从控制台也可以看到输出的提示:
我们来测试添加和查找功能:
1、首先来添加一个User
添加成功:
控制台打印了相应信息:
2、我们来查找这个User:
控制台打印出了相应的信息。
其他的删除和修改功能都与之类似,JPA功能可以让我们统一所有数据库的操作和使用,在开发过程中JPA有利于加快我们的开发速度,不用去了解每一个数据库的实际实现和运用。