国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表

這篇具有很好參考價值的文章主要介紹了Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

由于在項目中使用到了Spring Data JPA(Java Persistent API)進行項目開發(fā),并且自己對JPA比較感興趣想進行學(xué)習(xí)和了解。首先學(xué)習(xí)和了解的是JPA自動創(chuàng)建數(shù)據(jù)庫表,通過JPA能夠讓軟件工程師們不用再去手動創(chuàng)建數(shù)據(jù)表,能夠減輕軟件工程師們的工作量。
通過本篇博客可以實現(xiàn)使用Spring Data JPA自動創(chuàng)建數(shù)據(jù)庫表,并且可以使表與表之間具有關(guān)聯(lián)性(一對多,多對多,一對一)最后可以通過可視化工具Navicat進行表關(guān)系的查看。

Spring Data JPA demo

實現(xiàn)的demo,可以進行下載參考
Spring Data JPA Demo

實現(xiàn)步驟

目前的程序環(huán)境是spring boot項目,JDK8.0,MySQL Connector / J 8.0(8.0版本支持java8及其以上的版本,支持5.6、5.7、8.0版本的mysql數(shù)據(jù)庫,支持4.2版本的jdbc)

導(dǎo)入依賴

在spring boot項目中導(dǎo)入JPA依賴和mysql依賴

		<!--jpa 啟動器-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>

		<!--mysql連接器-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

創(chuàng)建實體類

目前有兩個實體類,一個基礎(chǔ)類
兩個實體類分別是UserEntity用戶實體類和ClassEntity班級實體類,他們之間具有一對多的關(guān)系,一個用戶對應(yīng)著一個班級,一個班級可以有多個用戶。

BaseEntity

import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.Column;
import javax.persistence.MappedSuperclass;
import java.util.Date;

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : BaseEntity
 * @description : [基礎(chǔ)類]
 * @createTime : [2022/11/18 15:32]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/18 15:32]
 * @updateRemark : [描述說明本次修改內(nèi)容]
 */
//@MappedSuperclass的類將不是一個完整的實體類,他將不會映射到數(shù)據(jù)庫表,但是他的屬性都將映射到其子類的數(shù)據(jù)庫字段中。
@MappedSuperclass

public class BaseEntity {


 	//定義字段以及字段的類型和長度和是否允許為null
    @Column(name = "create_by",columnDefinition = "varchar(32) COMMENT '創(chuàng)建人'",nullable = false)
    private String createdBy;

    @Column(name = "created_id",columnDefinition = "varchar(32) COMMENT '創(chuàng)建人id'",nullable = false)
    private Long createdId;



    @Column(name = "create_time",nullable = false,columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP  COMMENT '創(chuàng)建時間'")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    @Column(name = "updated_by",columnDefinition = "varchar(32) COMMENT '更新人'")
    private String updateBy;
    @Column(name = "updated_id",columnDefinition = "varchar(32) COMMENT '更新人id'")
    private Long updateId;

	定義字段以及字段的類型并默認為當前時間,并當進行修改的時候更新時間為當前實現(xiàn)
    @Column(name = "update_time",columnDefinition = "DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間'")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    @Column(name = "is_delete",columnDefinition = "tinyint(1) COMMENT '是否刪除(0/1 未刪除/刪除)'")
    private int isDelete=0;
    @Column(name = "remark",columnDefinition = "varchar(64) COMMENT '備注'")
    private String remark;

    public String getCreatedBy() {
        return createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }


    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public String getUpdateBy() {
        return updateBy;
    }

    public void setUpdateBy(String updateBy) {
        this.updateBy = updateBy;
    }

    public Long getCreatedId() {
        return createdId;
    }

    public void setCreatedId(Long createdId) {
        this.createdId = createdId;
    }

    public Long getUpdateId() {
        return updateId;
    }

    public void setUpdateId(Long updateId) {
        this.updateId = updateId;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public int getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(int isDelete) {
        this.isDelete = isDelete;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }
}

UserEntity

import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : UserEntity
 * @description : [用戶實體類]
 * @createTime : [2022/11/18 14:57]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/18 14:57]
 * @updateRemark : [描述說明本次修改內(nèi)容]
 */
@Entity //聲明類為實體類
@Table(name="jpa_user")//對應(yīng)創(chuàng)建之后的表名
public class UserEntity extends BaseEntity{
    @Id
    @Column(name = "user_code",columnDefinition = "bigint(20) COMMENT '學(xué)號'",nullable = false)//定義字段名和類型以及長度和備注,和是否允許為null
    private Long id;

    @Column(name="user_Name",nullable = false,columnDefinition = "varchar(32) COMMENT '用戶名'")
    private String userName;
    @Column(name="pass_word",nullable = false,columnDefinition = "varchar(32) COMMENT '密碼'")
    private String password;
    @Column(name="phone_Number",nullable = false,columnDefinition = "varchar(16) COMMENT '手機號'")
    private String phoneNumber;
    @Column(name="sex",columnDefinition = "varchar(2) COMMENT '性別'")
    private String sex;
    @Column(name="birthday",nullable = false,columnDefinition = "datetime COMMENT '生日日期'")
    @DateTimeFormat(pattern = "yyyy-MM-dd ")
    private Date birthday;

	//定義與ClassEntity之間的關(guān)聯(lián)關(guān)系為一對多
	//cascade:該屬性定義類和類之間的級聯(lián)關(guān)系,cascade 的值只能從 CascadeType.PERSIST (級聯(lián)新建)、 CascadeType.REMOVE (級聯(lián)刪除)、 CascadeType.REFRESH (級聯(lián)刷新)、 CascadeType.MERGE (級聯(lián)更新)中選擇一個或多個。還有一個選擇是使用 CascadeType.ALL ,表示選擇全部四項。

    @OneToMany(cascade = CascadeType.ALL)
    //在保存關(guān)系中的表中,所保存關(guān)聯(lián)的外鍵字段
    @JoinColumn(name="user_code")
    private List<ClassEntity>classEntities=new ArrayList<>();


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public List<ClassEntity> getClassEntities() {
        return classEntities;
    }

    public void setClassEntities(List<ClassEntity> classEntities) {
        this.classEntities = classEntities;
    }

    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;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

ClassEntity

import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * @author : [WangWei]
 * @version : [v1.0]
 * @className : ClassEntity
 * @description : [班級實體]
 * @createTime : [2022/11/18 15:47]
 * @updateUser : [WangWei]
 * @updateTime : [2022/11/18 15:47]
 * @updateRemark : [描述說明本次修改內(nèi)容]
 */
@Entity
//指定創(chuàng)建之后的表名和創(chuàng)建索引
@Table(name = "jpa_class",
    indexes = {@Index(name = "index_class_name",columnList = "class_name")}
)
//添加表的注釋
@org.hibernate.annotations.Table(appliesTo = "jpa_class",comment = "班級表")
public class ClassEntity extends BaseEntity{

    @Id
    @Column(name = "class_id",columnDefinition = "bigint(20) COMMENT '學(xué)號'",nullable = false)
    private Long id;
    
    @Column(name ="class_name",nullable = false,columnDefinition = "varchar(32) COMMENT '班級名'")
    private String className;
   
    @Column(name="address",nullable = false,columnDefinition = "varchar(128) COMMENT '班級地址'")
    private String address;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getClassName() {
        return className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

編輯application.yml文件配置數(shù)據(jù)庫連接和jpa配置

spring:
  datasource:
    #mysq 驅(qū)動
    driver-class-name: com.mysql.cj.jdbc.Driver
    #連接數(shù)據(jù)庫的url中配置ip和數(shù)據(jù)庫名稱以及時區(qū)
    url: jdbc:mysql://localhost:3306/spring_jpa?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
    username: root
    password: root
  jpa:
    hibernate:
      #更新或者創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu)
      ddl-auto: update
    #控制臺顯示SQL
    show-sql: true

運行測試

完整的目錄結(jié)構(gòu):
Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表
1.運行程序
出現(xiàn)以下界面,表示運行成功
Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表
2.在Navicat中查看已創(chuàng)建成功的表
Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表
查看相應(yīng)的表結(jié)構(gòu)和建表語句
Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表
Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表

Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表
Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表

3.查看表之間的關(guān)系
Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表
Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表

總結(jié)

目前博主只是初步進行了實現(xiàn),像在項目中進行實際運用還有大量需要學(xué)習(xí)和掌握的知識,特別是處理表與表之間的關(guān)系。文章來源地址http://www.zghlxwxcb.cn/news/detail-446957.html

如果博主的文章對您有所幫助,可以評論、點贊、收藏,支持一下博主!!!

到了這里,關(guān)于Spring Data JPA之自動創(chuàng)建數(shù)據(jù)庫表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 使用Spring Data JPA實現(xiàn)審計功能,記錄創(chuàng)建人、創(chuàng)建時間、最后修改時間和最后修改人

    近日心血來潮想做一個開源項目,目標是做一款可以適配多端、功能完備的模板工程,包含后臺管理系統(tǒng)和前臺系統(tǒng),開發(fā)者基于此項目進行裁剪和擴展來完成自己的功能開發(fā)。 本項目為前后端分離開發(fā),后端基于 Java21 和 SpringBoot3 開發(fā),后端使用 Spring Security 、 JWT 、 Spr

    2024年01月19日
    瀏覽(32)
  • Spring Data Elasticsearch - 在Spring應(yīng)用中操作Elasticsearch數(shù)據(jù)庫

    Spring Data Elasticsearch為文檔的存儲,查詢,排序和統(tǒng)計提供了一個高度抽象的模板。使用Spring Data ElasticSearch來操作Elasticsearch,可以較大程度的減少我們的代碼量,提高我們的開發(fā)效率。 要使用Elasticsearch我們需要引入如下依賴: 還需要在配置文件中增加如下配置 類比于MyBat

    2024年02月14日
    瀏覽(19)
  • 如何使用Spring Data JPA簡化MySQL數(shù)據(jù)訪問

    本篇文章是 “一起學(xué)習(xí)mysql” 系列的第五篇文章,本篇文章我們學(xué)習(xí)一下Spring Data JPA的使用,在開始學(xué)習(xí)器,我們先來了解一下什么是JPA。 JPA的全稱是Java Persistence API,是J2EE中的一條規(guī)范,它標準化了數(shù)據(jù)持久化API。在上一篇文章中,我們了解了如何使用MyBatis進行MySQL數(shù)據(jù)

    2024年02月15日
    瀏覽(27)
  • 69、Spring Data JPA 的 @Query查詢 和 命名查詢(半自動:提供 SQL 或 JPQL 查詢)

    69、Spring Data JPA 的 @Query查詢 和 命名查詢(半自動:提供 SQL 或 JPQL 查詢)

    1、方法名查詢(全自動,既不需要提供sql語句,也不需要提供方法體) 2、@Query查詢(半自動:提供 SQL 或 JPQL 查詢) 3、自定義查詢(全手動) @Query查詢 和 命名查詢的區(qū)別: 命名查詢與直接用@Query來定義查詢的本質(zhì)是一樣,只不過它們定義SQL或JPQL語句的位置不同。

    2024年02月07日
    瀏覽(19)
  • 圖數(shù)據(jù)庫Neo4j學(xué)習(xí)四Spring Data NEO

    圖數(shù)據(jù)庫Neo4j學(xué)習(xí)四Spring Data NEO

    如下所示,這是我們的一個實際的節(jié)點,我們以該節(jié)點為例,創(chuàng)建一個UserNode 如果出現(xiàn)以下錯誤 解決方法 :找到你安裝neo4j的路徑下的conf文件夾,neo4j.conf,找到 將前面的注釋#去掉,然后重啟neo4j,在重啟項目即可。 通過接口創(chuàng)建User節(jié)點,老王 ,然后再neo4j中查詢,看能否

    2024年02月11日
    瀏覽(44)
  • 圖數(shù)據(jù)庫Neo4j學(xué)習(xí)四——Spring Data NEO

    圖數(shù)據(jù)庫Neo4j學(xué)習(xí)四——Spring Data NEO

    如下所示,這是我們的一個實際的節(jié)點,我們以該節(jié)點為例,創(chuàng)建一個UserNode 如果出現(xiàn)以下錯誤 解決方法 :找到你安裝neo4j的路徑下的conf文件夾,neo4j.conf,找到 將前面的注釋#去掉,然后重啟neo4j,在重啟項目即可。 通過接口創(chuàng)建User節(jié)點,老王 ,然后再neo4j中查詢,看能否

    2024年02月13日
    瀏覽(58)
  • 圖數(shù)據(jù)庫_Neo4j和SpringBoot Data整合使用_實戰(zhàn)創(chuàng)建明星關(guān)系圖譜---Neo4j圖數(shù)據(jù)庫工作筆記0010

    2023-09-10 10:37:48 補充 注意:下面是舊版本的語法,如果你發(fā)現(xiàn)@NodeEntity這樣的注解沒有的話可以這樣: 這里就要用@Node 另外如果@StartNode和@EndNode都沒有了,那么說明是用法變了. 關(guān)于最新的用法,在官網(wǎng)有明確的說明和案例,很有用: 下面給出官網(wǎng)的案例:

    2024年02月09日
    瀏覽(47)
  • Spring Data JPA簡化數(shù)據(jù)訪問,提升開發(fā)效率和程序可維護性

    Java Persistence API(JPA)是一種Java EE的ORM規(guī)范用于與關(guān)系型數(shù)據(jù)庫進行交互。它提供了Java對象模型和關(guān)系型數(shù)據(jù)庫之間的映射。JPA為開發(fā)者提供了一種面向?qū)ο蟮姆绞絹碓L問數(shù)據(jù)庫,同時也減少了應(yīng)用程序與底層數(shù)據(jù)庫之間的重復(fù)代碼。 Spring Data JPA是基于JPA規(guī)范的一個Spring

    2024年02月05日
    瀏覽(37)
  • SpringBoot工程啟動時自動創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)表

    針對Java工程啟動時自動創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)表的需求 對 java、springmvc工程,我們需要自己動手去實現(xiàn)創(chuàng)建數(shù)據(jù)表、表數(shù)據(jù),具體請移步參閱:JAVA工程啟動時自動創(chuàng)建數(shù)據(jù)庫、數(shù)據(jù)表 下面我們來探討在Springboot下怎么去實現(xiàn) 我們知道,springboot工程配置數(shù)據(jù)源一般采用yaml或prope

    2024年02月02日
    瀏覽(110)
  • spring boot下基于spring data jpa配置mysql+達夢多數(shù)據(jù)源(以不同包路徑方式,mysql為主數(shù)據(jù)源)

    :mysql 達夢/dameng jpa 多數(shù)據(jù)源 spring boot:2.1.17.RELEASE mysql驅(qū)動:8.0.21(跟隨boot版本) 達夢驅(qū)動:8.1.2.192 lombok:1.18.12(跟隨boot版本) 以mysql為主數(shù)據(jù)源,達夢為第二數(shù)據(jù)源方式配置 適用于舊項目二次開發(fā)接入達夢數(shù)據(jù)庫或基于通用二方/三方包做業(yè)務(wù)擴展等場景 將以不

    2024年02月05日
    瀏覽(59)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包