惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
腾讯CDC
S
SegmentFault 最新的问题
D
DataBreaches.Net
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog
Recent Announcements
Recent Announcements
阮一峰的网络日志
阮一峰的网络日志
N
Netflix TechBlog - Medium
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 三生石上(FineUI控件)
F
Fortinet All Blogs
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Martin Fowler
Martin Fowler
雷峰网
雷峰网
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
小众软件
小众软件
云风的 BLOG
云风的 BLOG
T
Tailwind CSS Blog

博客园 - Zhang_Xiang

刚开始,你以为只是换工作 高管的 AI 精神病 代码是 AI 写的,生产事故谁背锅? AI Agent 走出 Demo 幻觉的唯一解药:Harness Engineering 从 page、page_size 到游标:深入解析C端产品的两种主流分页技术 Apache Kafka 的基本概念 Apache Kafka 移除 ZK Proposals webRTC demo Spring Authorization Server(AS)从 Mysql 中读取客户端、用户 Java 对象实现 Serializable 的原因 Spring Authorization Server 实现授权中心 OAuth 2.1 框架 Spring Security dapr 本地环境升级 BuildPack 打包 spring-boot 2.5.4,nacos 作为配置、服务发现中心,Cloud Native Buildpacks 打包镜像,GitLab CI/CD 如何拆分大型单体系统为微服务 高可用 Keycloak,K8s Keycloak 13 自定义用户身份认证流程(User Storage SPI) OAuth 2.0、OIDC 讲不清楚? Mokito 单元测试与 Spring-Boot 集成测试 关于 JMeter 5.4.1 的一点记录
Spring Data JPA 使用
Zhang_Xiang · 2022-05-21 · via 博客园 - Zhang_Xiang

Spring Data JPA

build.gradle

plugins {  
    id 'org.springframework.boot' version '2.7.0'  
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'  
    id 'java'  
}  
  
group = 'com.insight.into.life'  
version = '0.0.1-SNAPSHOT'  
sourceCompatibility = '17'  
  
configurations {  
    compileOnly {  
        extendsFrom annotationProcessor  
    }  
}  
  
repositories {  
    mavenCentral()  
}  
  
dependencies {  
    implementation 'org.springframework.boot:spring-boot-starter-web'   
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'  
    implementation 'org.springframework.boot:spring-boot-starter-actuator'  
  
    compileOnly 'org.projectlombok:lombok'  
    developmentOnly 'org.springframework.boot:spring-boot-devtools'  
    runtimeOnly 'mysql:mysql-connector-java'  
  
    annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'  
    annotationProcessor 'org.projectlombok:lombok'  
  
    testImplementation 'org.springframework.boot:spring-boot-starter-test'  
    testImplementation 'org.springframework.security:spring-security-test'  
}  
  
tasks.named('test') {  
    useJUnitPlatform()  
}

添加

  • org.springframework.boot:spring-boot-starter-web
  • org.springframework.boot:spring-boot-starter-data-jpa
  • mysql:mysql-connector-java

application.yml

server:  
  port: 9000  
  
logging:  
  level:  
    org.springframework.security: info  
  
spring:  
  datasource:  
    driver-class-name: com.mysql.cj.jdbc.Driver  
    url: jdbc:mysql://localhost:3306/auth-center?useUnicode=true&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=Asia/Shanghai  
    username: root  
    password: 123456  
  jpa:  
    hibernate:  
      ddl-auto: update

spring.jpa.hibernate.ddl-auto 的参数可选项有

  • none:使用 mysql 数据库时,默认值为 none,对数据库表不会产生任何影响
  • update:Hibernate 根据实体变更表结构
  • create:每次都会重新创建表,但是应用程序关闭时,不会删除表
  • create-drop:创建表,应用程序关闭时,删除表。使用内存数据库,比如 H2 时,默认此选项

实体

package com.insight.into.life.auth.center.domain;  
  
import lombok.Getter;  
import lombok.RequiredArgsConstructor;  
import lombok.Setter;  
import lombok.ToString;  
import org.springframework.security.core.GrantedAuthority;  
import org.springframework.security.core.userdetails.UserDetails;  
  
import javax.persistence.Column;  
import javax.persistence.Entity;  
import javax.persistence.Id;  
import java.time.LocalDateTime;  
import java.util.ArrayList;  
import java.util.Collection;  
  
/**  
 * @author Zhang_Xiang  
 * @since 2022/5/16 15:17:25  
 */@Entity  
@Getter  
@Setter  
@ToString  
@RequiredArgsConstructor  
public class Member implements UserDetails {  
  
    @Id  
    @Column(name = "id", nullable = false)  
    private Long id;  
  
    private String loginAccount;  
  
    private String password;  
  
    private LocalDateTime lastLoginTime;  
  
  
    @Override  
    public Collection<? extends GrantedAuthority> getAuthorities() {  
        return new ArrayList<>() {  
            {  
                add(() -> "read");  
                add(() -> "write");  
            }  
        };  
    }  
  
    @Override  
    public String getPassword() {  
        return password;  
    }  
  
    @Override  
    public String getUsername() {  
        return loginAccount;  
    }  
  
    @Override  
    public boolean isAccountNonExpired() {  
        return true;  
    }  
  
    @Override  
    public boolean isAccountNonLocked() {  
        return true;  
    }  
  
    @Override  
    public boolean isCredentialsNonExpired() {  
        return true;  
    }  
  
    @Override  
    public boolean isEnabled() {  
        return true;  
    }  
}

Repository

创建自定义仓储

package com.insight.into.life.auth.center.repository;  
  
import com.insight.into.life.auth.center.domain.Member;  
import org.springframework.data.repository.CrudRepository;  
  
import java.util.Optional;  
  
/**  
 * @author Zhang_Xiang  
 * @since 2022/5/20 15:36:41  
 */public interface MbrRepository extends CrudRepository<Member, Long> {  
  
    Optional<Member> findByLoginAccount(String loginAccount);  
}