Spring Data Jpa 学习

什么是Spring Data JPA

Spring Data JPA是Spring Data家族的一部分,可以轻松实现基于JPA的存储库。此模块处理对基于JPA的数据访问层的增强支持。它使构建使用数据访问技术的Spring驱动应用程序变得更加容易。

在相当长的一段时间内,实现应用程序的数据访问层一直很麻烦。必须编写太多样板代码来执行简单查询以及执行分页和审计。Spring Data JPA旨在减少实际需要的工作量来显著改善数据访问层的实现。

引入依赖和配置

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

  

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/chapter05?characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
#表示Jpa对应的数据库是mysql
spring.jpa.show-sql=true
#项目启动时根据实体类更新数据库中的表
spring.jpa.hibernate.ddl-auto=update

  

Spring Data JPA的使用

创建实体类

package com.example.lambdatest.entity;

import lombok.Data;

import javax.persistence.*;
import javax.persistence.criteria.CriteriaBuilder;

@Data
@Entity(name = "tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;

@Column(name = "username")
private String username;
@Column(name = "password")
private String password;

@Transient
private String ext;

public String getExt() {
return ext;
}

public void setExt(String ext) {
this.ext = ext;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}
}

  

注意id不应get,set否组会报错

@Entity注解表示该类是一个实体类,在项目启动时会根据该类自动生成一张表,表的名称即@Entity注解中name的值,如果不配置name,默认表名为类名
所有的实体类都要有主键,@Id注解表示该属性是一个主键,@GneeratedValue注解表示主键自动生成,strategy则表示主键的生成策略
默认情况下,生成的表中字段的名称时实体类中属性的名称,通过@Column注解可以定制生成的字段的属性,name表示该属性对应的数据表中字段的名称,nullable表示该字段非空
@Transient注解表示在生成数据库的表时,该属性被忽略,即不生成对应的字段
JPA自带的几种主键生成策略:

TABLE:使用一个特定的数据库表格来保存主键
SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。这个值要于generator一起使用,generator指定生成主键的生成器
IDENTITY:主键由数据库自动生成(主要支持自动增长的数据库,如mysql)
AUTO:主键由程序控制,也是GenerationType的默认值

 

dao层

package com.example.lambdatest.dao;

import com.example.lambdatest.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MyUserDao extends JpaRepository<User,Integer> {

}

  

controller层

@RequestMapping(value = "/addUser", method= RequestMethod.GET)
    public void addUser(){
        User my_user=new User();
        my_user.setUsername("wc");
        my_user.setPassword("test");
        //my_user.setId(1);
        myUserService.addUser(my_user);

    }

  

posted @ 2022-11-30 22:07  妇愁者纞萌  阅读(17)  评论(0编辑  收藏  举报