springboot16-JPA的整合和使用

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)、启动项目:

首先我们的数据库里没有表:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yYgaDNaT-1584263870074)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315170933786.png)]

启动项目后:

在这里插入图片描述

自动生成我们之前设置了table注解的表名。

我们从控制台也可以看到输出的提示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X5oRZzPJ-1584263870079)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171051875.png)]

我们来测试添加和查找功能:

1、首先来添加一个User

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KUIbotc3-1584263870082)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171144884.png)]

添加成功:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oIdlQtbG-1584263870085)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171158730.png)]

控制台打印了相应信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zw5GnArX-1584263870088)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171219608.png)]

2、我们来查找这个User:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-At1GgMrN-1584263870090)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171259595.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iWwnFFPY-1584263870092)(C:\Users\ouguangji\AppData\Roaming\Typora\typora-user-images\image-20200315171308346.png)]

控制台打印出了相应的信息。

其他的删除和修改功能都与之类似,JPA功能可以让我们统一所有数据库的操作和使用,在开发过程中JPA有利于加快我们的开发速度,不用去了解每一个数据库的实际实现和运用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章