ORM——使用spring jpa data實現邏輯刪除

前言   

    在業務中是忌諱物理刪除數據的,數據的這個對於一個IT公司能夠說是最核心的資產,若是刪除直接就物理刪除,無疑是對核心資產的不重視,可能扯的比較遠,本文最主要是想經過spring jpa data實現邏輯刪除。spring

    在平常開發中咱們能夠方便的經過findXxx等增查改數據,可是若是直接使用deleteXxx的話,數據是直接從數據庫刪除的,這是咱們不想要的,咱們數據庫中設計了is_del字段話,默認0是未刪除,1是刪除,若是在刪除的時候,但願是隻是一個update的動做,把is_del改爲1。sql

    固然你能夠在刪除的時候,重寫dao刪除的操做,經過傳入的刪除id值,查詢須要刪除的實體,而後經過Update操做進行邏輯操做,這樣是可行的,不過jpa data提供了一個更優雅的操做方式。數據庫

開始   

        jpa data提供了一個註解@SQLDelete,能夠在操做的實體上註解,定義註解屬性sql,sql就是一個update語句,具體能夠看下面這個實體類:spa

@Data
@Accessors(chain = true)
@Entity
@Table(name = "SCORE_HIS")
@SQLDelete(sql = "update SCORE_HIS set IS_DEL = 1 where HIS_ID = ?")
@Where(clause = "IS_DEL = 0")
public class ScoreHis {
    @Id
    @Column(name = "HIS_ID")
    private String hisId;
    
    .....    

    @Type(type = "org.hibernate.type.NumericBooleanType")
    @Column(name = "IS_DEL")
    private boolean isDel = false;
}

    在實體類中註解了@SQLDelete,而且使用@Where註解,對查詢進行時候必須是沒有被刪除的,在查詢的時候會在條件裏面加上註解中的未刪除條件,在下面這行代碼中調用delete的方法:hibernate

@Transactional
public void deleteScoreHis(String scoreHisId){
    scoreHisDao.delete(scoreHisId);

    ....省略代碼
}

    上述操做執行後,庫中的IS_DEL字段變成了1,成功的實現了邏輯刪除的操做。設計

總結

    spring jpa data讓dao層的寫法輕鬆了不少,可是一些比較深層的使用,有待一步步挖掘(好比動態條件查詢,如今寫起來仍是挺麻煩),可是我以爲能夠很好的替代hibernate,畢竟是對hibernate的封裝。開發

相關文章
相關標籤/搜索