使用反射封裝ORM框架,真香!

2021-10-06 03:51:23 字數 3462 閱讀 9610

在前幾篇文章中,我對反射機制進行了詳細的介紹,並且使用反射手寫了乙個springioc框架。為了鞏固和加深對反射機制的理解,本篇文章將使用反射封裝乙個簡單的orm框架。如果對反射不太熟悉的小夥伴,可以看我之前寫的幾篇文章【反射詳解】【使用反射手寫springioc】,知識點非常齊全,相信看完以後,你一定會有所收穫,並且可以更好的理解本篇文章。

我們在做開發的過程中,需要經常對資料庫進行操作,這時我們就需要使用到orm框架,例如比較常用的mybatis和hibernate。下面我將對orm框架進行詳細的介紹並且封裝乙個簡單的orm框架。

當我們不使用orm框架開發乙個應用程式時,需要寫很多sql語句,每一次執行,都要開啟/關閉資料連線,這樣在開發的過程是很麻煩的,而且開發效率低。並且像讀取、儲存和刪除物件資訊這些**都是重複的,會造成**冗餘。而使用orm框架可以很好的解決這些問題,使我們減少很多繁瑣重複的工作量,讓我們的注意力集中在實現業務上。

orm框架優點如下:

操作簡單,提高了開發效率;

減少重複**,消除冗餘;

資料訪問更抽象,更輕便;

支援物件導向封裝。

下面我將使用反射機制封裝乙個簡單的orm框架來實現插入功能。

3.1建立資料庫表

首先需要建立乙個資料庫表,下面我們就使用user表進行演示。

create

table

user

(userid varchar(20

)primary

keynot

null

,username varchar(20

)not

null

,password varchar(20

)not

null

,emil varchar(20

)not

null

);

接著我們需要建立user表所對應的實體類。

public

class

user

public

void

setuserid

(string userid)

public string getusername()

public

void

setusername

(string username)

public string getpassword()

public

void

setpassword

(string password)

public string getemil()

public

void

setemil

(string emil)

}

3.3使用反射進行封裝

使用反射把獲取屬性和屬性值的功能進行封裝,更有利於擴充套件。

public

class

dbutils

catch

(exception e)

return connection;

}/**

* 插入資料

* @return

* @param obj

*/public

static

boolean

insert

(object obj)

throws exception

return

false;}

/** * 封裝當前類的所有屬性,拼接屬性sql

* @param obj

* @return

*/public

static string field

(object obj)

// 獲取class檔案

class cls

= obj.

getclass()

;// 獲取當前類所有屬性

field[

] fields = cls.

getdeclaredfields()

; string fieldsql =

getfield

(fields)

;return fieldsql ;

}/**

* 獲取所有屬性並拼接成sql

* @param declaredfields

* @return

*/public

static string getfield

(field[

] declaredfields)

}return sf.

tostring()

;}/** * 封裝當前類的所有屬性值,拼接屬性值sql

* @param obj

* @return

*/public

static string fieldvalue

(object obj)

// 獲取class檔案

class cls

= obj.

getclass()

;// 獲取當前類的屬性值

field[

] fields = cls.

getdeclaredfields()

; string fieldvaluesql =

getfieldvalue

(obj, fields)

;return fieldvaluesql ;

}/**

* 獲取所有屬性值並拼接成sql

* @param obj

* @param declaredfields

* @return

*/public

static string getfieldvalue

(object obj, field[

] declaredfields)

//如果是string型別,則加上'',不是則不加

if(flag)

else

if(i < declaredfields.length -1)

}catch

(exception e)

}return sf.

tostring();}}

3.4效果演示
public

class

test

}

執行結果

資料庫user表

由執行結果可以看出,使用orm框架插入資料成功。

beego框架之orm的使用

mysql postgresql sqlite3 beego orm的相關特性 支援 go 的所有型別儲存 輕鬆上手,採用簡單的 crud 風格 自動 join 關聯表 跨資料庫相容查詢 允許直接使用 sql 查詢 對映 嚴格完整的測試保證 orm 的穩定與健壯 orm的使用 匯入orm的依賴 go...

使用註解簡單地實現ORM框架

orm 物件關係對映 簡而言之,實體類與資料庫表字段的一一對應 我們要做的工作 使用註解來實現實體類與表的對映,並且使用反射技術生成sql語句 1 定義表名的註解 target elementtype.type retention retentionpolicy.runtime public int...

輕量型ORM框架Dapper的使用

public classliuniancontext idisposable 執行增刪改操作 包括批量操作 sql語句 有引數引數化 引數化值 public bool execute string sql,objectparam catch returnissuccess 執行儲存過程操作 儲存過程...