在我们的项目开发中,数据库的访问及存储都是最为核心的部分,SpringBoot为我们提供了多种数据库来做数据的存储及读取。目前企业开发中应用最为广泛的数据库有,关系型数据库
MySQL,oracle,sqlserver,非关系型数据库redis,mongodb等。
        本章将通过使用SpringBoot访问MySQL结合
SpringDataJPA完成CRUD(Create,Read,Update,Delete)简单操作。

一、了解SpringDataJPA
        Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,其主要目标是使得对数据的访问变得方便快捷。Spring
Data包含多个子项目,spring-data-jpa就是其子项目之一。
        JPA(Java Persistence API)是一种Java持久化解决方案,负责把数据保存到数据库,实际上
它就是一种标准、规范,而不是具体的实现。JPA属于重量级的,因为它需要运行在JAVA EE容器中,而Spring Data
JPA提供了轻量级的实现,在任何servlet容器中都可以运行。
        Spring Data JPA相对于JAVA EE中的JPA,配置更简单,以轻量级的方式实现了部分在 EJB 容器环境下才具有的功能,将
EntityManager 的创建与销毁、事务管理等代码抽取出来,并由其统一管理,并且极大的简化了数据库访问层的代码。

官网地址:http://projects.spring.io/spring-data-jpa/
<http://projects.spring.io/spring-data-jpa/>

二、SpringBoot整合SpringDataJPA

1.添加依赖关系

打开POM文件,添加SpringBoot对MySQL以及SpringDataJPA的支持依赖。
添加mysql-connector-java的支持
<!--引入MySQL的依赖关系--> <dependency> <groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId> <scope>runtime</scope>
</dependency>添加spring-data-jpa的支持
<!--引入JPA的依赖关系--> <dependency> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
2.配置数据源以及JPA
MySQL数据库是我事先安装好的,我在本地安装了MySQL 5.7.20.0版本,并且创建了一个名叫test的数据库,如果需求可以查看安装MySQL详解
<http://blog.csdn.net/weixin_41557632/article/details/78943248>

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

[email protected]

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接口(SpringDataJPA提供的简单数据操作接口)、JpaSpecificationExecutor(SpringDataJPA提供的复杂查询接口)、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; public interface UserJPA extends
JpaRepository<User,Long>,JpaSpecificationExecutor<User>,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<User> list(){ return userJPA.findAll(); }
其中userJps.findAll()方法就是SpringDataJPA为我们提供的内置方法,它可以查询表内所有的数据。

运行程序,请求地址:http://localhost:8080/user/list




3.添加删除方法
/** * 删除用户信息,删除信息后返回剩余信息 * */ @RequestMapping(value = "/delete",method =
RequestMethod.GET) public List<User> delete(Long id){ userJPA.deleteById(id);
return userJPA.findAll(); }
执行结果,请求地址:http://localhost:8080/user/delete?id=1




可以看到,成功删除id=1的记录。