SpringBoot与数据访问(JPA)

四、整合SpringData JPA操作数据库

1.引入JPA依赖

JPA:ORM(Object Relational Mapping)

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

依赖关系图
JPA依赖关系图
配置数据源

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/jpa
        username: root
        password: 1234567890
        driver-class-name: com.mysql.jdbc.Driver
2.编写一个实体类(bean)和数据表进行映射,并且配置好映射关系;
package com.atorg.springboot.entity;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import javax.persistence.*;

//配置映射关系,使用jpa注解
//@JsonIgnoreProperties(value = {"hibernateLazyInitializer"})
@Entity     //告诉JPA这是一个实体类(和数据表映射的类)
@Table(name="tb1_user")  //使用@Table来指定和那个数据表对应;如果省略默认表名就是user
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;
    }
}

@Entity:告诉JPA这是一个实体类,和数据表映射类;
**@Table(name=”tb1_user”) :使用@Table来指定和那个数据表对应;如果省略默认表名就是类名小写即对应此表为user;

@Id:这是一个主键
@GeneratedValue(strategy = GenerationType.IDENTITY) :表示主键自增;@Column(name = “last_name”,length = 50):表示这是和数据表队对应的一个列,可以自定义列名和长度,如果省略默认列名就是属性名

3.编写一个Dao接口来操作实体类对应的数据表(Repository)
    package com.atorg.springboot.repository;

    import com.atorg.springboot.entity.User;
    import org.springframework.data.jpa.repository.JpaRepository;

    //继承JpaRepository来完成对数据库的操作
    public interface UserRepository extends JpaRepository<User,Integer> {
    }

此外还得对jpa进行基本的配置参考JpaRepository

spring: 
  jpa:
     hibernate:
#      更新或者创建数据表结构(如果没有实体类中的数据表时将自动创建,如果存在将自动更新数据)
       ddl-auto: update
#      控制台显示sql
       show-sql: true

jpa.hibernate.ddl-auto: update //更新或者创建数据表结构(如果没有实体类中的数据表时将自动创建,如果存在将自动更新数据)
可以有下图看到默认的数据池是HikariPool
成功创建数据表
数据库成功创建数据表
数据库成功添加数据表

4.编写Controller进行测试
package com.atorg.springboot.controller;

import com.atorg.springboot.entity.User;
import com.atorg.springboot.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).orElse(null);
        return user;
    }
    //插入数据
    @GetMapping("/user")
    public User insertUser(User user ){
        User save=userRepository.save(user);
        return save;
    }
}

findById(id),save() 这两个方法是UserRepository 因为继承JpaRepository在JpaRepository封装了操作数据库的所有方法
发送查询请求
在这里插入图片描述
控制台生成sql语句
在控制台生成的sql语句
发送插入数据请求
插入数据
控制台生成的sql语句
控制台生成的sql语句
数据库数据表的信息增加
数据库数据表的信息增加


Author: Lelege
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Lelege !
评论
  TOC