在我们的项目开发中,数据库的访问及存储都是最为核心的部分,SpringBoot为我们提供了多种数据库来做数据的存储及读取。目前企业开发中应用最为广泛的数据库有,关系型数据库MySQL,oracle,sqlserver,非关系型数据库redis,mongodb等。
本章将通过使用SpringBoot访问MySQL结合SpringDataJPA完成CRUD(Create,Read,Update,Delete)简单操作。
Spring Data 是一个用于简化数据库访问,并支持云服务的开源框架,其主要目标是使得对数据的访问变得方便快捷。Spring Data包含多个子项目,Spring Data JPA 就是其子项目之一。
JPA(Java Persistence API)是一种Java持久化解决方案,负责把数据保存到数据库,实际上它就是一种标准、规范,而不是具体的实现。
Spring Data JPA 是spring在基于ORM框架、JPA规范的基础上封装的一套JPA框架,可以令开发者使用极简的代码实现对数据的访问和操作。
Spring Data JPA 使开发人员简化了对DAO层代码的编写,摆脱了对数据库的CRUD等基本操作,使用了Spring Data JPA ,开发人员在DAO层中只需要写接口,就自动具有了增删改查、分页查询等方法。
Spring Data JPA相对于JAVA EE中的JPA,配置更简单,以轻量级的方式实现了部分在 EJB 容器环境下才具有的功能,将 EntityManager 的创建与销毁、事务管理等代码抽取出来,并由其统一管理,并且极大的简化了数据库访问层的代码。
官网地址:http://projects.spring.io/spring-data-jpa/
1.添加依赖关系
打开POM文件,添加SpringBoot对MySQL以及SpringDataJPA的支持依赖。
添加mysql-connector-java的支持
mysql
mysql-connector-java
runtime
添加spring-data-jpa的支持
org.springframework.boot
spring-boot-starter-data-jpa
2.配置数据源以及JPA
MySQL数据库是我事先安装好的,我在本地安装了MySQL 5.7.20.0版本,并且创建了一个名叫test的数据库,如果需求可以查看安装MySQL详解
MySQL数据库管理工具SQLyog,在test数据库下新建表结构t_user,详情如下:
修改application.properties文件,添加数据源配置。
修改application.properties文件,添加JPA配置。
JPA的配置了show-sql用来在控制台输出JPA自动生成的sql语句。
3.编写实体类
根据数据库中的字段来创建一个user实体类作为对应操作。
package com.mxy.springboot.entity;
import javax.persistence.*;
@Entity
@Table(name="t_user")
public class User {
@Id
@GeneratedValue
@Column(name = "t_id")
private Long id;
@Column(name = "t_name")
private String name;
@Column(name = "t_age")
private String age;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Column(name = "t_address")
private String address;
}
4.编写控制器Controller
我们采用@RestController注解来编写一个控制器
package com.mxy.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/user")
public class JPAController {
}
5.创建JPA接口类
创建UserJPA接口并且继承SpringDataJPA内的接口作为父类,UserJPA继承了JpaRepository接口(提供的简单数据操作接口)、JpaSpecificationExecutor(提供的复杂查询接口)、Serializable(序列化接口)。
package com.mxy.springboot.jpa;
import com.mxy.springboot.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.io.Serializable;
/**
* 符合SpringDataJpa的dao层接口规范
* 1、继承 JpaRepository<操作的实体类类型,实体类中主键属性的类型>它封装了基本CRUD操作
* 2、继承 JpaSpecificationExecutor<操作的实体类类型>它封装了复杂查询(分页)
*/
public interface UserJPA extends JpaRepository,JpaSpecificationExecutor,Serializable {
}
我们并不需要做其他的任何操作了,因为SpringBoot以及SpringDataJPA会为我们全部搞定,SpringDataJPA内部使用了类代理的方式,让继承了它接口的子接口,都以spring管理的Bean的形式存在。
以上,我们已经完成了SpringBoot整合JPA的工作,接下来我们将使用SpringDataJPA完成数据的CRUD(Create,Read,Update,Delete)简单操作。
三、使用SpringDataJPA完成数据的CRUD
JPAController控制器内编写代码,完成数据的CRUD操作。
1.添加新增、更新方法
package com.mxy.springboot.controller;
import com.mxy.springboot.entity.User;
import com.mxy.springboot.jpa.UserJPA;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/user")
public class JPAController {
@Autowired
private UserJPA userJPA;
/**
* 数据新增或更新,save方法可以执行添加也可以执行更新,如果需要执行持久化的实体存在主键值则更新数据,如果不存在则添加数据。
*/
@RequestMapping(value = "/save", method = RequestMethod.GET)
public User save(User user) {
return userJPA.save(user);
}
}
运行程序,查看结果,添加一条用户信息到数据库中,请求地址:http://localhost:8080/user/save?name=zhangsan&age=20&address=beijing
查看数据库,保存成功。
更新地址为“北京市朝阳区”,请求地址:http://localhost:8080/user/save?id=1&address=北京市朝阳区
查看数据库结果,更新数据成功。
2.查询方法
JPAController中增加查询列表的方法
/**
* 查询用户信息
* */
@RequestMapping(value = "/list",method = RequestMethod.GET)
public List list(){
return userJPA.findAll();
}
其中userJps.findAll()方法就是SpringDataJPA为我们提供的内置方法,它可以查询表内所有的数据。
运行程序,请求地址:http://localhost:8080/user/list
3.删除记录
/**
* 删除用户信息,删除信息后返回剩余信息
* */
@RequestMapping(value = "/delete",method = RequestMethod.GET)
public List delete(Long id){
userJPA.deleteById(id);
return userJPA.findAll();
}
执行结果,请求地址:http://localhost:8080/user/delete?id=1
可以看到,成功删除id=1的记录。