一、pom.xml文件重引入jpa依赖

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

二、application.yml配置数据源信息

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test
    type: com.alibaba.druid.pool.DruidDataSource
    username: edu
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

pa.hibernate.ddl-auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:

  • create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
  • create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
  • update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
  • validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

三、定义domain对象

package springboot.domain;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@Getter
@Setter
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    @Column(name = "name", nullable = true, length = 20)
    private String name;

    @Column(name = "agee", nullable = true, length = 4)
    private int age;
}

四、PersonRepository接口

package springboot.repository;

import org.springframework.data.jpa.repository.JpaRepository;
import springboot.domain.Person;

public interface PersonRepository extends JpaRepository<Person, Long> {

    Person findByName(String name);
}

五、写controller接口测试

package springboot.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import springboot.domain.Person;
import springboot.repository.PersonRepository;

@RestController
@RequestMapping(value = "person")
public class PerconController {

    @Autowired
    private PersonRepository personRepository;

    @PostMapping(path = "addPerson")
    public void addPerson(Person person) {
        personRepository.save(person);
    }

    @DeleteMapping(path = "deletePerson")
    public void deletePerson(Long id) {
        Person p = new Person();
        p.setId(id);
        personRepository.delete(p);
    }

    @GetMapping("getPerson")
    public Object getPerson(@RequestParam("name") String name) {
        return personRepository.findByName(name);
    }
}

六、项目启动信息

spring boot jpa开启sql打印 spring boot jpa配置_加载


项目启动时,检测到数据配置,就会自动给你在数据库创建出相应的表,如下所示:

spring boot jpa开启sql打印 spring boot jpa配置_spring_02

七、用postman测试

spring boot jpa开启sql打印 spring boot jpa配置_加载_03


spring boot jpa开启sql打印 spring boot jpa配置_hibernate_04


可能因为name是中文,没有解析出来,这里是null,再试试英文能不能解析出来,重新换个英文name(“zhangquandan”)也不行,发现可是age也不对啊,肯定是值没有传进去。

在参数前面加了一个@RequestBody注解后,值就传进来了

spring boot jpa开启sql打印 spring boot jpa配置_加载_05

spring boot jpa开启sql打印 spring boot jpa配置_spring_06


八、测试getPerson方法

spring boot jpa开启sql打印 spring boot jpa配置_加载_07


spring boot jpa开启sql打印 spring boot jpa配置_hibernate_08