SpringBoot整合SpringDataJPA

JPA是java的一套持久层规范,它定义了一系列的orm接口,但是它本身是不能直接使用的。
因为这些接口需要实现才可以使用的。
Hibernate框架就是一个JPA的实现。

JPA是一个独立的概念,本身就是一套规范。

Spring Data JPA 不是对JPA规范的具体实现,本身是一个抽象层,底层还是通过Hiberate实现的。
而Hiberate又是一个全自动的orm映射。所以说Spring Data JPA也是一个全自动化的映射。(全自动化指的是我们不需要去定义sql语句了),同时它也会完成实体类和表的直接映射。

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
 </dependency>

参考文章:https://www.cnblogs.com/williamjie/p/9321868.html

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.southwind</groupId>
    <artifactId>springbootmybatis22</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
       </dependency>
    </dependencies>



</project>

在这里插入图片描述在这里插入图片描述在这里插入图片描述
注入的是接口但是绑定的是实现类

mybatis没有了实现类,所以我们这里没有绑定实现类(mybatis的底层是通过反射自己把结果集解析出来封装成一个java对象)

在这里插入图片描述Spring Data JPA(直接实体类和表进行映射就可以了,相当于jdbc的实现类或者mybatis的sql语句都不用写了)
我们需要把表进行映射,把表中的字段进行映射。

package com.southwind.entity;

import lombok.Data;

import javax.persistence.*;
import java.util.Date;
@Data
@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)   //表示的是主键自增
    private Long id;
    @Column
    private String name;
    @Column
    private Double score;
    @Column
    private Date birthday;
}

实体类有了以后我们就去创建它的repository
3.创建StudentRepository接口
写接口的时候常用的CRUD操作Spring Data JPA已经帮我们提供好了。我们直接把模板拿过来用就可以了。(通过继承的方式把模板拿过来就可以了)
继承的接口中save和update整合到一起了(它就是通过判断主键是否存在来决定是save还是update)。
一些基本的CRUD我们就不需要写了,一些特殊的业务比如findByName等你就自己写到里面。

package com.southwind.repository;


import com.southwind.entity.Student;
import org.springframework.data.jpa.repository.JpaRepository;
//传的数据类型分别是实体类的数据类型和主键的数据类型
public interface StudentRepository extends JpaRepository<Student,Long> {

}

4.创建StudentHandler,注入StudentRepository

DAO层就是持久层,就是操作数据库的部分(剩下的就是业务层和变现层)

SSM框架下各个层的解释说明:https://blog.csdn.net/lutianfeiml/article/details/51864160

在这里插入图片描述

@GetMapping("/findById/{id}")
    public Student findById(@PathVariable("id") Long id){
        return studentRepository.findById(id).get();   //加个get就好了
    }

如果报错我们把Spring Data JPA版本调高就好了
在这里插入图片描述jpa可以帮我们把自定义的方法进行实现(但是这个命名是有一定规范的)

package com.southwind.controller;

import com.southwind.entity.Student;
import com.southwind.repository.StudentRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
//这里我们直接让它返json数据
public class StudentHandler {
    @Autowired
    private StudentRepository studentRepository;

    @GetMapping("/findAll")
    public List<Student> findAll(){
        return studentRepository.findAll();
    }

    @GetMapping("/findById/{id}")
    public Student findById(@PathVariable("id") Long id){
        return studentRepository.findById(id).get();
    }

    @PostMapping("/save")
    public void save(@RequestBody Student student){
        studentRepository.save(student);
    }
    @PutMapping("/update")
    public void update(@RequestBody Student student){
        studentRepository.save(student);
    }
    @DeleteMapping("/deleteById/{id}")
    public void deleteById(@PathVariable("id") Long id){
        studentRepository.deleteById(id);
    }


}

5.配置Application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mbtest?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    show-sql: true
    properties:
      hibernate:
        format_sql: true

配置application.yml连接数据库

mysql是5版本的driver-class-name填写com.mysql.jdbc.Driver
8版本则是:com.mysql.cj.jdbc.Driver

spring:
  thymeleaf:
    mode: HTML5
  datasource:
    url: jdbc:mysql://localhost:3306/whlg01?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: admin
    password: admin
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

参考文章:https://blog.csdn.net/qq_43235578/article/details/107642095
在这里插入图片描述在这里插入图片描述
6.最后创建springboot的启动类

package com.southwind;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}

如果我们觉得写的没问题但是启动不了,可以把pom.xml和xml文件重写导入一遍

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值