四、整合SpringData JPA操作数据库
1.引入JPA依赖
JPA:ORM(Object Relational Mapping)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
依赖关系图
配置数据源
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语句
数据库数据表的信息增加