亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

【從零入門系列-2】Spring Boot 之 數(shù)據(jù)庫實(shí)體定義實(shí)現(xiàn)

nemo / 3795人閱讀

摘要:文章系列從零入門系列之從零入門系列之程序結(jié)構(gòu)設(shè)計(jì)說明前言本篇文章開始代碼實(shí)踐,系統(tǒng)設(shè)計(jì)從底向上展開,因此本篇先介紹如何實(shí)現(xiàn)數(shù)據(jù)庫表實(shí)體類的設(shè)計(jì)實(shí)現(xiàn)。主鍵由數(shù)據(jù)庫自動(dòng)生成主要是自動(dòng)增長(zhǎng)型主鍵由程序控制。

文章系列

【從零入門系列-0】Sprint Boot 之 Hello World

【從零入門系列-1】Sprint Boot 之 程序結(jié)構(gòu)設(shè)計(jì)說明

前言

本篇文章開始代碼實(shí)踐,系統(tǒng)設(shè)計(jì)從底向上展開,因此本篇先介紹如何實(shí)現(xiàn)數(shù)據(jù)庫表實(shí)體類的設(shè)計(jì)實(shí)現(xiàn)。

SpringBoot數(shù)據(jù)庫的持久層框架主要分為兩種架構(gòu)模式,即以JDBC Template為代表的SQL類和以Spring Data JPA為代表的ORM對(duì)象類。其中:

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 規(guī)范的基礎(chǔ)上封裝的一套JPA應(yīng)用框架,可使開發(fā)者用極簡(jiǎn)的代碼即可實(shí)現(xiàn)對(duì)數(shù)據(jù)的訪問和操作。它提供了包括增刪改查等在內(nèi)的常用功能,且易于擴(kuò)展!學(xué)習(xí)并使用 Spring Data JPA 可以極大提高開發(fā)效率!spring data jpa讓我們解脫了DAO層的操作,基本上所有CRUD都可以依賴于它來實(shí)現(xiàn),自己寫個(gè)倉儲(chǔ)接口后繼承JpaRepository即可實(shí)現(xiàn)最基本的增刪改查功能!

在使用@Entity進(jìn)行實(shí)體類的持久化操作,當(dāng)JPA檢測(cè)到我們的實(shí)體類當(dāng)中有@Entity 注解的時(shí)候,會(huì)在數(shù)據(jù)庫中生成關(guān)聯(lián)映射對(duì)應(yīng)的表結(jié)構(gòu)信息,因此針對(duì)本項(xiàng)目情況最底層的設(shè)計(jì)實(shí)現(xiàn)一個(gè)@Entity注解的書籍對(duì)象定義即可。

項(xiàng)目開始前,先按上一篇文章【從零入門系列-1】Sprint Boot 之 程序結(jié)構(gòu)設(shè)計(jì)說明后臺(tái)程序結(jié)構(gòu)建立相對(duì)應(yīng)的目錄:

控制層:前端路由和后端處理關(guān)系處理,目錄:Controller
數(shù)據(jù)服務(wù)層:自定義對(duì)數(shù)據(jù)庫的訪問操作方法,目錄:Service
數(shù)據(jù)訪問層:實(shí)現(xiàn)通用的數(shù)據(jù)庫訪問功能,SpringData的JPA方案,目錄:Dao
數(shù)據(jù)實(shí)體層:定義數(shù)據(jù)庫表的屬性方法,目錄:Domain

根據(jù)結(jié)構(gòu),我們需要在Domain目錄下編寫項(xiàng)目表實(shí)體類,右鍵Domain文件夾,New->Java Class。

編寫實(shí)體類

1.新建Book

   package com.arbboter.demolibrary.Domain;
   
   import javax.persistence.Entity;
   import javax.persistence.Table;
   
   /**
    * @Entity 注解該類為數(shù)據(jù)庫表實(shí)體類,JPA可自動(dòng)掃描識(shí)別到
    * @Table 注解數(shù)據(jù)表信息,其中name指定表名
    */
   @Entity
   @Table(name = "library_book")
   public class Book{
   }

注意添加的類需要使用@Entity注解,其中@Table是可選的,默認(rèn)不配置生成的表名和類名相同,如果上述類中不使用@Table,那么本類對(duì)應(yīng)的表名為book。

2.添加表字段信息

   public class Book{
       /**
        * ID,唯一主鍵,按Alt+Enter可以快速導(dǎo)入引入
        */
       @Id
       @GeneratedValue
       private Integer id;
   
       /**
        * 書名
        */
       private String name;
   
       /**
        * 作者
        */
       private String author;
   
       /**
        * 封面
        */
       private String image;
   }

@Id注解用于聲明一個(gè)實(shí)體類的屬性映射為數(shù)據(jù)庫的主鍵列,該屬性通常置于屬性聲明語句之前,可與聲明語句同行,也可寫在多帶帶行上。

@GeneratedValue用于注解主鍵的生成策略,通過strategy 屬性指定。默認(rèn)情況下,JPA 自動(dòng)選擇一個(gè)最適合底層數(shù)據(jù)庫的主鍵生成策略:SqlServer對(duì)應(yīng)identity,MySQL 對(duì)應(yīng) auto increment。

TABLE:使用一個(gè)特定的數(shù)據(jù)庫表格來保存主鍵。

SEQUENCE:根據(jù)底層數(shù)據(jù)庫的序列來生成主鍵,條件是數(shù)據(jù)庫支持序列。

IDENTITY:主鍵由數(shù)據(jù)庫自動(dòng)生成(主要是自動(dòng)增長(zhǎng)型)

AUTO:主鍵由程序控制。

該注解的strategy屬性默認(rèn)值為GenerationType.AUTO

?

3.利用IDEA自動(dòng)添加getter setter toString方法

   @Entity
   @Table(name = "library_book")
   public class Book{
       /**
        * 屬性此處未列出
        */
   
       /**
        * 按Alt+Insert 或者 在此文件空白處右鍵選擇Generate...
        * 自動(dòng)生成getter和setter及toString方法
        */
       public Integer getId() {
           return id;
       }
   
       public void setId(Integer id) {
           this.id = id;
       }
   
       public String getName() {
           return name;
       }
   
       public void setName(String name) {
           this.name = name;
       }
   
       public String getAuthor() {
           return author;
       }
   
       public void setAuthor(String author) {
           this.author = author;
       }
   
       public String getImage() {
           return image;
       }
   
       public void setImage(String image) {
           this.image = image;
       }
   
       @Override
       public String toString() {
           return "Book{" +
                   "id=" + id +
                   ", name="" + name + """ +
                   ", author="" + author + """ +
                   ", image="" + image + """ +
                   "}";
       }
   }

建議按Alt+Insert 或者 在此文件空白處右鍵選擇Generate...自動(dòng)生成gettersettertoString方法,其中toString方便輸出查閱。

4.啟動(dòng)測(cè)試

此時(shí)啟動(dòng)main函數(shù)發(fā)現(xiàn),程序正常啟動(dòng),但是查看數(shù)據(jù)庫我們可以發(fā)現(xiàn)數(shù)據(jù)庫表library_book并沒有自動(dòng)生成,因?yàn)榈竭@里我們還沒有自定義配置JPA。

這里先配置上JPA的配置,本項(xiàng)目使用的SQL Server 2008數(shù)據(jù)庫,在application.properties配置文件中新增以下配置信息:

# JPA配置
spring.jpa.database=sql_server
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.database-platform=org.hibernate.dialect.SQLServer2008Dialect

建議以上配置項(xiàng)都設(shè)置上,我在學(xué)習(xí)過程中因沒有配置spring.jpa.database-platform項(xiàng),導(dǎo)致項(xiàng)目啟動(dòng)失敗。配置spring.jpa.hibernate.ddl-auto取值含義為:

ddl-auto:create----每次運(yùn)行該程序,沒有表格會(huì)新建表格,表內(nèi)有數(shù)據(jù)會(huì)清空

ddl-auto:create-drop----每次程序結(jié)束的時(shí)候會(huì)清空表

ddl-auto:update----每次運(yùn)行程序,沒有表格會(huì)新建表格,表內(nèi)有數(shù)據(jù)不會(huì)清空,只會(huì)更新

ddl-auto:validate----運(yùn)行程序會(huì)校驗(yàn)數(shù)據(jù)與數(shù)據(jù)庫的字段類型是否相同,不同會(huì)報(bào)錯(cuò)

新增該配置后再次啟動(dòng)程序,我們可以在輸出欄看到類似這樣的輸出:

2019-05-14 12:09:34.977  INFO 115652 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.SQLServer2008Dialect
Hibernate: create table library_book (id int not null, author varchar(255), image varchar(255), name varchar(255), primary key (id))

從日志中我們可以看出,程序已經(jīng)自動(dòng)創(chuàng)建了book的實(shí)體類了,可以在數(shù)據(jù)庫中驗(yàn)證發(fā)現(xiàn),該表已創(chuàng)建OK。

注解說明

@Table - 映射表名

@Table注解用來標(biāo)識(shí)實(shí)體類與數(shù)據(jù)表的對(duì)應(yīng)關(guān)系,默認(rèn)和類名一致。

@Id - 主鍵

@GeneratedValue(strategy=GenerationType.IDENTITY) - 自動(dòng)遞增生成

@Column(name = "dict_name",columnDefinition="varchar(100) COMMENT "字典名"") - 字段名、類型、注釋

Column注解來標(biāo)識(shí)實(shí)體類中屬性與數(shù)據(jù)表中字段的對(duì)應(yīng)關(guān)系,其屬性均為可選屬性:

name屬性定義了被標(biāo)注字段在數(shù)據(jù)庫表中所對(duì)應(yīng)字段的名稱;

unique屬性表示該字段是否為唯一標(biāo)識(shí),默認(rèn)為false。如果表中有一個(gè)字段需要唯一標(biāo)識(shí),則既可以使用該標(biāo)記,也可以使用@Table標(biāo)記中的@UniqueConstraint。

nullable屬性表示該字段是否可以為null值,默認(rèn)為true。如果屬性里使用了驗(yàn)證類里的@NotNull注釋,這個(gè)屬性可以不寫。

insertable屬性表示在使用“INSERT”腳本插入數(shù)據(jù)時(shí),是否需要插入該字段的值。

updatable屬性表示在使用“UPDATE”腳本插入數(shù)據(jù)時(shí),是否需要更新該字段的值。insertable和updatable屬性一般多用于只讀的屬性,例如主鍵和外鍵等。這些字段的值通常是自動(dòng)生成的。

columnDefinition屬性表示創(chuàng)建表時(shí),該字段創(chuàng)建的SQL語句,一般用于通過Entity生成表定義時(shí)使用。若不指定該屬性,通常使用默認(rèn)的類型建表,若此時(shí)需要自定義建表的類型時(shí),可在該屬性中設(shè)置。(也就是說,如果DB中表已經(jīng)建好,該屬性沒有必要使用。)

table屬性定義了包含當(dāng)前字段的表名。

length屬性表示字段的長(zhǎng)度,當(dāng)字段的類型為varchar時(shí),該屬性才有效,默認(rèn)為255個(gè)字符。

precision屬性和scale屬性表示精度,當(dāng)字段類型為double時(shí),precision表示數(shù)值的總長(zhǎng)度,scale表示小數(shù)點(diǎn)所占的位數(shù)。

@UpdateTimestamp - 更新時(shí)自動(dòng)更新時(shí)間

@CreationTimestamp - 創(chuàng)建時(shí)自動(dòng)更新時(shí)間

@Version - 版本號(hào),更新時(shí)自動(dòng)加1

結(jié)束語

本章內(nèi)容記錄了數(shù)據(jù)庫實(shí)體類的簡(jiǎn)單的實(shí)現(xiàn)方式,并通過application.properties配置JPA的數(shù)據(jù)庫配置項(xiàng),使得程序運(yùn)行后能自動(dòng)關(guān)聯(lián)并操作數(shù)據(jù)庫表。

下一章將介紹對(duì)數(shù)據(jù)庫的增刪改查(CRUD)操作相關(guān)內(nèi)容,請(qǐng)繼續(xù)關(guān)注。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/77667.html

相關(guān)文章

  • 從零入門系列-1】Spring Boot 程序結(jié)構(gòu)設(shè)計(jì)

    摘要:結(jié)束語本章預(yù)先提供了項(xiàng)目實(shí)際效果圖以及項(xiàng)目的整體結(jié)構(gòu)設(shè)計(jì),后續(xù)文章會(huì)根據(jù)本篇章設(shè)計(jì)依次實(shí)現(xiàn)各個(gè)模塊,請(qǐng)持續(xù)關(guān)注。 文章系列 【從零入門系列】Sprint Boot 之 Hello World 設(shè)計(jì)效果圖 頁面展示showImg(https://raw.githubusercontent.com/arbboter/resource/master/segmentfault/image/...

    jcc 評(píng)論0 收藏0
  • 從零入門系列-3】Spring Boot 數(shù)據(jù)庫操作

    摘要:編寫測(cè)試用例代碼打開框架自動(dòng)生成的測(cè)試代碼文件編寫測(cè)試用例,測(cè)試增刪改查效果,測(cè)試代碼如下注釋,它可以對(duì)類成員變量方法及構(gòu)造函數(shù)進(jìn)行標(biāo)注,完成自動(dòng)裝配的工作。 文章系列 【從零入門系列-0】Sprint Boot 之 Hello World 【從零入門系列-1】Sprint Boot 之 程序結(jié)構(gòu)設(shè)計(jì)說明 【從零入門系列-2】Sprint Boot 之 數(shù)據(jù)庫實(shí)體類 前言 前一章...

    Leo_chen 評(píng)論0 收藏0
  • 從零入門系列-0】Spring Boot Hello World

    摘要:結(jié)束語非常智能化,為開發(fā)者提供大量的默認(rèn)配置細(xì)節(jié),因此在的幫助下可以快速完成項(xiàng)目的運(yùn)行,極簡(jiǎn)入門繼續(xù)看從零入門系列程序結(jié)構(gòu)設(shè)計(jì)說明 環(huán)境準(zhǔn)備 java 開發(fā)環(huán)境 JDK1.8 安裝 Maven 安裝,jar自動(dòng)依賴及包管理工具 IDE編輯器:IntelliJ IDEA 2019 說明 本項(xiàng)目為從零入門示例,目標(biāo)為構(gòu)建一個(gè)書籍增刪改查管理頁,力爭(zhēng)記錄一個(gè)無java基礎(chǔ)的程序員學(xué)習(xí)筆...

    icyfire 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

nemo

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<