小書MybatisPlus第5篇-Active Record模式精講

字母哥部落格發表於2020-07-17

本文為一個系列中的第五節,前四節訪問如下地址:

Active Record 適合非常簡單的領域需求,尤其在領域模型和資料庫模型十分相似的情況下。如果遇到更加複雜的領域模型結構(例如用到繼承、策略的領域模型),往往需要使用分離資料來源的領域模型,結合 Data Mapper (資料對映器)使用。

具體到使用層面,我們之前章節講過使用Data Mapper 做資料的持久層操作。

User user = new User();
user.setName("字母哥");
user.setAge(18);

userMapper.insert(user);   //Mybatis Mapper模式

現在我們使用ActiveRecord模式,用法如下,注意二者的區別

User user = new User();
user.setName("zimug");
user.setAge(18);

user.insert();  //ActiveRecord模式

一、使ActiveRecord模式生效

首先:需要讓資料庫表對應的資料持久層實體類。整合自Model,並實現序列化介面。

@Data   //lombok註解
@EqualsAndHashCode(callSuper = true)
public class User extends Model<User> implements Serializable {
    private static final long serialVersionUID = 6401942840459021558L;
    private Long id;
    private String name;
    private Integer age;
    private String email;
}

其實定義一個Mapper繼承自BaseMapper<T>,T代表資料持久層實體類。

public interface UserMapper extends BaseMapper<User> {
}

這樣Mybatis Plus的ActiveRecord模式就生效了,預設的幫我們實現瞭如下的一些資料持久層方法。
Mybatis Plus的ActiveRecord模式方法

二、增刪該查的實現

增加:向持久層實體類User對應的資料庫表user,插入一條資料。

@Test
public void testInsert() {
  User user = new User();
  user.setName("zimug");
  user.setAge(18);
  user.setEmail("hadoopcn2@163.com");

  boolean success = user.insert();
  System.out.println("是否插入成功:"+success);
}

查詢:從資料庫表user查詢所有資料


@Test
public void testSelect() {
  User user = new User();
  List<User> users = user.selectAll();
  users.forEach(System.out::println);
}

新增或更新:

  • 未設定ID,被視為insert操作,向資料庫插入資料
  • 如果設定ID,則先查詢是否有此id的記錄,如果有此id記錄,則視為update,如果沒有則視為insert
@Test
public void testUpdate() {
  User user = new User();
  user.setId(1283915378849751041L);
  user.setAge(25);

  boolean success = user.insertOrUpdate();
  System.out.println("是否新增或更新成功(更新):"+success);
}

根據id在資料庫表user中刪除一條記錄

@Test
public void testDelete() {
  User user = new User();
  user.setId(1283915378849751041L);

  boolean success = user.deleteById();
  System.out.println("是否刪除成功:"+success);
}

歡迎關注我的部落格,裡面有很多精品合集

  • 本文轉載註明出處(必須帶連線,不能只轉文字):字母哥部落格

覺得對您有幫助的話,幫我點贊、分享!您的支援是我不竭的創作動力! 。另外,筆者最近一段時間輸出瞭如下的精品內容,期待您的關注。

相關文章