Reface.NPI 方法名稱解析規則詳解


在上次的文章中簡單介紹了 Reface.NPI 中的功能。
本期,將對這方法名稱解析規則進行詳細的解釋和說明,
以便開發者可以完整的使用 Reface.NPI 中的各種功能。


基本規則

  • 方法名稱以 Insert , Delete , Select , Update 開頭
  • 方法名以數個單詞構成,關鍵字、字段、操作符、參數名都是一個單詞
  • 每個單詞以大寫開頭,其余全小寫
    • UserName 會被認作兩個單詞
    • Username 會被認作一個單詞
  • 使用入參填充 Sql參數 時,不計大小寫,你可以用 id 填充 @Id 的值

1 Insert 規則

僅使用 Insert 將使用實體中的所有字段的值寫入。

void Insert(Entity entity);

開發者也可以通過 Without 關鍵字排除一些字段的寫入,特別是那些依賴數據庫本身的字段。

下面的例子不會對 IdCreateTime 字段寫入

bool InsertWithoutIdCreatetime(User user);

2 Delete 規則

Delete 方法名包含一個 條件規則

條件規則 允許開發者定義一個 where 子語。

2.1 使用 By 聲明一個 條件規則

要在方法名中聲明一個條件,必須以 By 作為開始。

下面的方法,將會生成 where Id = @Id , 並以入參的 id 作為 @Id 的值。

void DeleteById(int id);

2.2 使用 AndOr 合並多個條件

你也可以使用 AndOr 合並多個條件

下面兩個方法將會生成 where Id = @Id and/or Name = @Name 並以入參的 idname 分別作用 @Id@Name 的值。

bool DeleteByIdAndName(int id, string name)

bool DeleteByIdOrName(int id, string name)

注意

  • 因為沒有想到一個好的方法可以對條件進行分組,所以目前不可以聲明條件組,形如 where ( Id = @Id and Name = @Name ) or ( State = @State and Loginname = @Loginname )

如果您有好的想法,您也可以告訴我,共同完善 Library 。非常期待您的分享,感謝!

2.3 更多的操作符

很明顯,我們不可能總是用 = 作為條件的判斷操作,
我們還有 大於,小於,Like等等。

你可以在字段名后面加上操作符來實現此功能。

下面的例子會生成 where Name Like @Name 的條件。

int DeleteByNameLike(string name)

目前系統中支持的操作符有

Sql Method
= Is , Equal , Equals
> Greaterthan , Gt
>= Greaterthanandequals , Gteq
< Lessthan , Lt
<= Lessthanandequals , Lteq
Like Like , Likes
In In

2.4 自定義參數名

在上面的例子中,參數名直接與字段名相同。

我們也可以在操作符后加上參數名來改名這個默認的參數名。

下面的例子會生成 where Password Like @Badpassworda Or Password Like @Badpasswordb

int DeleteByPasswordLikeBadpasswordaOrPasswordLikeBadpasswordb(string badPasswordA, string badPasswordB);

3 Update 規則

Update 規則由兩個部分組成

  • 條件規則 ( 與 Delete 規則相同)
  • Set 規則

Set 規則

3.1 指定 set 的字段

Update 關鍵字后接的部分,一直到 By 之前,都是 Set 的字段。

下面的例子會生成 set Password = @Password where Id = @Id

void UpdatePasswordById(int id, string password);

3.2 多個 set

你可以用 And 連接多個 set

下面的例子會生成 set Password = @Password , Changingtime = @Changingtime where Id = @Id

bool UpdatePasswordAndChangingtimeById(int id, string password, DateTime changingTime);

3.3 自定義 set 參數

條件規則 一樣,生成的語句中,會默認使用字段名作為參數名。

你也可以在字段后添加 Equals 再加上 參數名稱 來自定義參數名。

下面的例子會生成 set Count = @Newcount where Id = @Id And Count = @Oldcount

int UpdateCountEqualsNewcountByIdAndCountIsOldcount(int id, int oldCount, int newCount);

3.4 不指定 set 子句

當沒有 set 子句的時候,
會以排除了 By 子句的條件后的所有字段作為 set 子句。

下面的例子會生成 update [user] set name = ?, password = ? where id = ?

// User : Id, Name, Password
int UpdateById(int id, User user);

若表中還有一些字段在 Update 時即不是條件,也不打算更新。可以使用 Without 關鍵字指定。
下面的例子中,User 包含四個屬性

  • Id
  • Name
  • Password
  • CreateTime
// 下面的語句不會對 CreateTime 進行更新
void UpdateWithoutCreatetimeById(int id, User user);

4 Select 規則

Select規則 包含以下三個規則

  • 條件規則 ( 與 DeleteUpdate 相同 )
  • 輸出字段規則
  • 排序規則
  • 分頁查詢

4.1 輸出字段

這個規則比較簡單,
只要把字段列在 Select 后即可,
多個字段可以用 And 連接。
輸出字段是可選的,你可以跳過這個部分直接編寫條件。

IList<Entity> SelectIdAndNameAndCreatetime();

4.2 條件規則

UpdateDelete 一樣,使用 By 關鍵字開始條件子句

User SelectById(int id);

4.3 排序規則

4.3.1 Orderby 子句

排序規則是由關鍵字 Orderby 開頭的 ( 除了 O 都是 小寫 )。

下面的例子會生成 ORDER BY Id Asc / Desc

IList<Entity> SelectOrderbyId();
IList<Eneity> SelectOrderbyIdDesc();

4.3.2 多個排序

多個排序不需要使用 And 連接,直接拼接即可。

IList<User> SelectOrderbyUsernameCreatetime();

4.3.3 分頁查詢

Select 方法前加上 Paging 就可以使用分頁查詢功能。

注意

  • 使用分頁查詢時,必須提供類型為 Paging 的參數。
IList<Order> PagingSelectByCreatetimeGt(DateTime createTime);

使用基於 Reface.AppStarter 開發的 Reface.AppStarter.NPI 你可以不避手動創建代理類,
只需要通過構造函數注入那些實現了 NPI 的接口,就可以直接對數據庫進行增刪改查的操作了。

在后面的文章中,會介紹 Reface.AppStarter.NPI 的功能和使用方法。


相關鏈接

關注公眾平台【清水潭】,可以查閱更多資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM