剛剛學習完了反射與註解,簡單實現乙個統一操作
通過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 前幾天在設計事件管理器時,我就在考慮磁碟滿的問題,磁碟滿是乙個典型的系統事件,沒有什麼好說的,問題是應該何時何地觸發它呢?如果由應用程式在操作檔案時觸發,那將有很多地方需要修改,這不是我們期望的。如果能在乙個地方統一處理,那就省事多了,...