用反射加註解,實現對表單統一插入操作(簡單實現)

2021-10-01 09:47:26 字數 3397 閱讀 7773

剛剛學習完了反射與註解,簡單實現乙個統一操作

通過jdbc對資料庫進行操作,就插入語句操作來說, 對於不同表,只有那條sql語句是不一樣的(其餘的獲取驅動等等相同操作就不說了),如何能使不同物件呼叫同乙個方法,得到對應的sql插入語句呢?

前提:物件的類名,及屬性名與資料庫的表名,列名是相同的

學生類

public

class

student

public

student

(int age, string name, string ***)

// 省略getter,setter方法

}

生成sql語句的類

為了檢驗生成的sql語句是否正確,將語句列印出來

public

class

sql cols = cols.

substring(0

,cols.

length()

-1);

parm = parm.

substring(0

,parm.

length()

-1);

// 拼接sql語句

string sql =

"insert into "

+name+

"("+cols+

")values("

+parm+

")";

system.out.

println

(sql);}

}

操作類

public

class

test

}

列印結果:

insert into student

(age,name,***)

values(?

,?,?

)

物件的類名,及屬性名與資料庫的表名,列名是不相同的

自定義註解

@retention

(retentionpolicy.runtime)

public @inte***ce

columns

改進學生類

@columns

("student"

)public

class

student

public

student

(int age, string name, string ***)

// 省略getter,setter方法

}

改進生成sql語句的類

改為運用反射獲取對應的值

public

class

sql cols = cols.

substring(0

,cols.

length()

-1);

parm = parm.

substring(0

,parm.

length()

-1);

// 拼接sql語句

string sql =

"insert into "

+name+

"("+cols+

")values("

+parm+

")";

system.out.

println

(sql);}

}

使用這個方法,類中必須有註解修飾,不然執行異常結果

insert into student

(s_age,s_name,s_***)

values(?

,?,?

)

改為對有,和沒有註解均適用的方法

改進方法:在獲取註解前先判斷,是否存在註解

方法 : .isannotationpresent(columns.class)

public

class

sqlelse

string cols ="";

//列名

string parm ="";

//佔位符

field[

] field = cls.

getdeclaredfields()

;for

(field field2 : field)

else

cols += value +

",";

parm +=

"?,";}

cols = cols.

substring(0

,cols.

length()

-1);

parm = parm.

substring(0

,parm.

length()

-1);

// 拼接sql語句

string sql =

"insert into "

+name+

"("+cols+

")values("

+parm+

")";

system.out.

println

(sql);}

}

person類(沒有註解)

public

class

person

public

person

(string name, string id, string password,string ***)

// 省略getter,setter 方法

}

操作類

public

class

test

}

結果

insert into student

(s_age,s_name,s_***)

values(?

,?,?

)insert into person

(name,id,password,***)

values(?

,?,?

,?)

使用註解和反射實現SpringIoC容器(簡潔版)

首先明確一下自己的需求 我們需要自定義一些註解,比如類似於spring的bean或者configuration註解,bean註解主要是放在方法上的,目的是將當前方法的返回值放入springioc容器中,configuration主要是用於識別當前類是乙個配置類的,註解定義好之後,就是利用反射實現,首...

用kprobes實現核心反射機制

用kprobes實現核心反射機制 作者 li xianjing 2007 5 29 前幾天在設計事件管理器時,我就在考慮磁碟滿的問題,磁碟滿是乙個典型的系統事件,沒有什麼好說的,問題是應該何時何地觸發它呢?如果由應用程式在操作檔案時觸發,那將有很多地方需要修改,這不是我們期望的。如果能在乙個地方統一...

用kprobes實現核心反射機制

用kprobes實現核心反射機制 作者 li xianjing 前幾天在設計事件管理器時,我就在考慮磁碟滿的問題,磁碟滿是乙個典型的系統事件,沒有什麼好說的,問題是應該何時何地觸發它呢?如果由應用程式在操作檔案時觸發,那將有很多地方需要修改,這不是我們期望的。如果能在乙個地方統一處理,那就省事多了,...