Java開源項目halo第一天

今天是2019.11.11.我今年大四赌结,準(zhǔn)備去一家公司做實習(xí)生姨涡。對于之后的java開發(fā)實習(xí)工作也不了解,正好機(jī)緣巧合之下通過B站UP主CodeSheep了解了開源項目halo的存在揍庄。所以準(zhǔn)備在簡書記錄我在這段時間對于halo的了解忿檩。

廢話不多說,直接上項目介蛉,先從git上拉取下來萌庆,然后通過idea將項目跑了起來。以下截圖是這個項目的源碼分類币旧。


項目代碼目錄

對于我這種還未走出校門的渣渣來說践险,上來直接讀源碼困難的確實存在的。我在學(xué)校對于java也沒有太多的了解(實話實說)吹菱。所以我打算從最基本的實體類開始記錄捏境。


實體類

第一步:


User實體類

先從實體類User類入手,通過User來了解正規(guī)的項目該如何書寫規(guī)范毁葱,和注釋的使用(這個項目是SpringBoot的)。就一步一步走吧贰剥。

為了方便倾剿,我直接就在源碼上面每行都加注釋,我是想先把代碼搞懂蚌成,其它的相關(guān)內(nèi)容我先放棄前痘,之后我們在深入下去,把主要精力放在本項目中担忧。

User實體來源碼

package run.halo.app.model.entity;

import lombok.Data;

import lombok.EqualsAndHashCode;

import lombok.ToString;

import run.halo.app.utils.DateUtils;

import javax.persistence.*;

import java.util.Date;

/**

* User entity

*

* @author ryanwang

* @date : 2019-03-12

*/

? ? ? //這些這是很多是來源于Lombok芹缔,它是一個Java庫,從引用的包中我們就可以看到瓶盛。Lombok的作用就是自動插入編輯器

? ? ? //并構(gòu)建工具最欠,簡化Java開發(fā)。通過添加注解的方式惩猫,不需要為類編寫getter或equals方法芝硬,同時可以自動化日志變量。主要還是簡化代碼的書寫

? ? ? // 轧房,提高開發(fā)的效率

@Data? //這個注釋注解在類上拌阴,為類提供讀寫屬性,此外還提供了equals()奶镶、hashCode()迟赃、toString()方法

@Entity //JPA中的@Entity表明該類為一個實體類

@Table(name ="users")//JPA中的@Table陪拘,當(dāng)實體類與其映射的數(shù)據(jù)庫表名不同名時需要使用@Table注解說明,該標(biāo)注與@Entity注解并列使用纤壁;name指定數(shù)據(jù)庫的表名

@ToString(callSuper =true)//lombok中的注解左刽。通過設(shè)置callSuper為true,可以將超類實現(xiàn)toString的輸出包含到輸出中摄乒。

@EqualsAndHashCode(callSuper =true)//lombok中的注解悠反,它默認(rèn)僅使用該類中定義的屬性且不調(diào)用父類的方法,通過callSuper=true調(diào)用父類的方法

public class Userextends BaseEntity {

@Id //用于聲明一個實體類的屬性映射為數(shù)據(jù)庫的主鍵列該屬性通常置于屬性聲明語句之前馍佑,

? ? @GeneratedValue(strategy = GenerationType.IDENTITY)//用于標(biāo)注主鍵的生成策略斋否,通過strategy屬性指定采用數(shù)據(jù)庫ID自增長的方式來自增主鍵字段

? ? @Column(name ="id")//表示所持久化屬性所映射表中的字段

? ? private Integerid;

/**

* User name.

*/

? ? @Column(name ="username", columnDefinition ="varchar(50) not null")

private Stringusername;

/**

* User nick name,used to display on page.

*/

? ? @Column(name ="nickname", columnDefinition ="varchar(255) not null")

private Stringnickname;

/**

* Password.

*/

? ? @Column(name ="password", columnDefinition ="varchar(255) not null")

private Stringpassword;

/**

* User email.

*/

? ? @Column(name ="email", columnDefinition ="varchar(127) default ''")

private Stringemail;

/**

* User avatar.

*/

? ? @Column(name ="avatar", columnDefinition ="varchar(1023) default ''")

private Stringavatar;

/**

* User description.

*/

? ? @Column(name ="description", columnDefinition ="varchar(1023) default ''")

private Stringdescription;

/**

* Expire time.

*/

? ? @Column(name ="expire_time", columnDefinition ="timestamp default CURRENT_TIMESTAMP")

@Temporal(TemporalType.TIMESTAMP)//時間yyyy-MM-dd hh:MM:ss

? ? private DateexpireTime;

@Override

? ? public void prePersist() {

super.prePersist();

id =null;

if (email ==null) {

email ="";

}

if (avatar ==null) {

avatar ="";

}

if (description ==null) {

description ="";

}

if (expireTime ==null) {

expireTime = DateUtils.now();

}

}

}

BaseEntity實體類源碼

package run.halo.app.model.entity;

import lombok.Data;

import lombok.EqualsAndHashCode;

import lombok.ToString;

import run.halo.app.utils.DateUtils;

import javax.persistence.*;

import java.util.Date;

/**

* Base entity.

*

* @author johnniang

* @date 3/20/19

*/

@Data

@ToString

@MappedSuperclass? //用來標(biāo)識父類,基于代碼復(fù)用和模型分離的思想拭荤,在項目開發(fā)中使用JPA的@MappedSuperclass注解將實體類的多個屬性分別封裝到不同的非實體類中茵臭。

? ? ? ? ? ? ? ? ? //標(biāo)識為@MappedSuperclass的類將不是一個完整的實體類,他將不會映射到數(shù)據(jù)庫表舅世,但是他的屬性都將映射到其子類的數(shù)據(jù)庫字段中旦委。

? ? ? ? ? ? ? ? ? //標(biāo)注為@MappedSuperclass的類不能再標(biāo)注@Entity或@Table注解,也無需實現(xiàn)序列化接口雏亚。

@EqualsAndHashCode

public class BaseEntity {

/**

* Create time.

*/

? ? @Column(name ="create_time", columnDefinition ="timestamp default CURRENT_TIMESTAMP")//JPA中的注解缨硝,表示所持久化屬性所映射表中的字段,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //columnDefinition屬性表示創(chuàng)建表時罢低,該字段創(chuàng)建的SQL語句查辩,一般用于通過Entitiy生成表定義時使用

? ? /**

* private String? name;

? ? * @Column(name=" contact_name ",columnDefinition="clob not null")

* public String getName() {

*? ? ? ? ? ? ? ? ? return name;

* }

? ? * 生成表的定義SQL語句如下所示。

? ? * CREATE TABLE contact (

* id integer not null,

* contact_name clob (200) not null,

* primary key (id)

* )

*/

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //若不指定該屬性网持,通常使用默認(rèn)的類型建表宜岛,若此時需要自定義建表的類型時,可在該屬性中設(shè)置功舀。

? ? @Temporal(TemporalType.TIMESTAMP)//Java的Date類型進(jìn)行格式化萍倡,一共有是那種注解值:TemporalType.TIMESTAMP:yyyy-MM-dd hh:MM:ss

? ? private DatecreateTime;

/**

* Update time.

*/

? ? @Column(name ="update_time", columnDefinition ="timestamp default CURRENT_TIMESTAMP")

@Temporal(TemporalType.TIMESTAMP)

private DateupdateTime;

/**

* Delete flag.

*/

? ? @Column(name ="deleted", columnDefinition ="TINYINT default 0")

private Booleandeleted =false;

@PrePersist //幫助您在持久化之前自動填充實體屬性

? ? protected void prePersist() {

deleted =false;

Date now = DateUtils.now();

if (createTime ==null) {

createTime = now;

}

if (updateTime ==null) {

updateTime = now;

}

}

@PreUpdate //每次更新實體時不必顯示更新實體的屬性,preUpdate不允許您更改您的實體辟汰。您只能使用傳遞給事件的計算的更改集來修改原始字段值

? ? protected void preUpdate() {

updateTime =new Date();

}

@PreRemove //在實體從數(shù)據(jù)庫刪除之前觸發(fā)

? ? protected void preRemove() {

updateTime =new Date();

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末列敲,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子帖汞,更是在濱河造成了極大的恐慌酿炸,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涨冀,死亡現(xiàn)場離奇詭異填硕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門扁眯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壮莹,“玉大人,你說我怎么就攤上這事姻檀∶” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵绣版,是天一觀的道長胶台。 經(jīng)常有香客問我,道長杂抽,這世上最難降的妖魔是什么诈唬? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮缩麸,結(jié)果婚禮上铸磅,老公的妹妹穿的比我還像新娘。我一直安慰自己杭朱,他們只是感情好阅仔,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弧械,像睡著了一般八酒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上刃唐,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天丘跌,我揣著相機(jī)與錄音,去河邊找鬼唁桩。 笑死,一個胖子當(dāng)著我的面吹牛耸棒,可吹牛的內(nèi)容都是我干的荒澡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼与殃,長吁一口氣:“原來是場噩夢啊……” “哼单山!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起幅疼,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤米奸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后爽篷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悴晰,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了铡溪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漂辐。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖棕硫,靈堂內(nèi)的尸體忽然破棺而出髓涯,到底是詐尸還是另有隱情,我是刑警寧澤哈扮,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布纬纪,位于F島的核電站,受9級特大地震影響滑肉,放射性物質(zhì)發(fā)生泄漏包各。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一赦邻、第九天 我趴在偏房一處隱蔽的房頂上張望髓棋。 院中可真熱鬧,春花似錦惶洲、人聲如沸按声。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽签则。三九已至,卻和暖如春铐料,著一層夾襖步出監(jiān)牢的瞬間渐裂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工钠惩, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留柒凉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓篓跛,卻偏偏與公主長得像膝捞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子愧沟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容