springBoot入门总结(三)整合SpringDataJPA

 在我们的项目开发中,数据库的访问及存储都是最为核心的部分,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持久化解决方案,负责把数据保存到数据库,实际上它就是一种标准、规范,而不是具体的实现。

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/

二、SpringBoot整合SpringDataJPA

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,详情如下:

springBoot入门总结(三)整合SpringDataJPA_第1张图片

修改application.properties文件,添加数据源配置。

springBoot入门总结(三)整合SpringDataJPA_第2张图片

 

修改application.properties文件,添加JPA配置。

 

springBoot入门总结(三)整合SpringDataJPA_第3张图片

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
springBoot入门总结(三)整合SpringDataJPA_第4张图片

查看数据库,保存成功。

springBoot入门总结(三)整合SpringDataJPA_第5张图片

更新地址为“北京市朝阳区”,请求地址:http://localhost:8080/user/save?id=1&address=北京市朝阳区

springBoot入门总结(三)整合SpringDataJPA_第6张图片

查看数据库结果,更新数据成功。

springBoot入门总结(三)整合SpringDataJPA_第7张图片

2.查询方法

JPAController中增加查询列表的方法

/**
     * 查询用户信息
     * */
    @RequestMapping(value = "/list",method = RequestMethod.GET)
    public List list(){
        return userJPA.findAll();
    }

其中userJps.findAll()方法就是SpringDataJPA为我们提供的内置方法,它可以查询表内所有的数据。

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

springBoot入门总结(三)整合SpringDataJPA_第8张图片

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

springBoot入门总结(三)整合SpringDataJPA_第9张图片

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

 

你可能感兴趣的:(SpringBoot入门)