利用反射快速給Model實體賦

2021-07-23 18:39:52 字數 2143 閱讀 5272

試想這樣乙個業務需求:有一張合同表,由於合同涉及內容比較多所以此表比較龐大,大概有120多個字段。現在合同每一次變更時都需要對合同原始資訊進行歸檔一次,版本號依次遞增。那麼我們就要新建一張合同歷史表,欄位跟原合同表一模一樣,此外多了乙個 合同版本號 字段。在歸檔時如何把原始合同資訊插入到合同歷史表呢?

很容易就能想到的一種解決方法:

insert into 合同歷史表(欄位1,欄位2,欄位3…………欄位120,版本號) select   欄位1,欄位2,欄位3…………欄位120,0 as 版本號 from 合同表 where 合同id=『******x』

這樣當然是能實現我們的功能的,但是看到了嗎?由於表的字段太多,導致sql看起來很不優雅,而且字段之間的對應很容易出問題。聯想起之前看過的 利用反射給model賦值的例子想出來下面的乙個解決方法:

現在假設兩個實體class1、class2,class2只比class1多乙個欄位newid,其它字段一模一樣。簡單定義如下:

[csharp]view plain

copy

print?

class

class1  

set}  

private

string

name;  

public

string

name  

set}  

private

intage;  

public

intage  

set}  

private

intnum;  

public

intnum  

set}  

}  

[csharp]view plain

copy

print?

class

class2  

set}  

private

string

id;  

public

string

id  

set}  

private

string

name;  

public

string

name  

set}  

private

intage;  

public

intage  

set}  

private

intnum;  

public

intnum  

set}  

}  

下面我們給class1賦值,然後通過反射獲取class2的屬性,迴圈把class1對應的值賦給class2,遇到class2多出的字段我們手功處理後跳過。簡單**如下:

[csharp]view plain

copy

print?

class1 c1 = 

newclass1();  

c1.id = "001"

;  c1.name = "ben.jiang"

;  c1.num = 712104195;  

c1.age = 24;  

class2 c2 = new

class2();  

type t2 = typeof

(class2);  

propertyinfo propertys2 = t2.getproperties();  

type t1 = typeof

(class1);  

propertyinfo propertys1 = t1.getproperties();  

foreach

(propertyinfo pi 

inpropertys2)  

object

value=t1.getproperty(name).getvalue(c1, 

null

);  

t2.getproperty(name).setvalue(c2,value ,null

);  

}  

這樣**看起來稍微優雅了一些,而且針對不同的字段我們處理起來也方便。

利用反射例項化實體

根據swagger apimodelproperty 註解類的 example 例項化 實體 param clazz 實體類 param 返回例項化的資料 return 返回例項化的資料 public static t mockexamplemodel classclazz return map2b...

利用BeanUtils工具快速給乙個類賦值

1.所需要導的包 2.新建乙個你要賦值的類,alt shift s r快速新增set和get方法 3.在建乙個測試類,建乙個map物件,新增一些資料,key值一定要和student物件裡面的屬性值相對應,這個工具類通過反射,找到student中相應的方法,進行賦值。直接呼叫beanutils.pop...

利用反射自動封裝成實體物件

利用此方法的時候需要傳遞的引數的名稱,必須以行號結尾,去掉行號就是屬性名稱,比如頁面傳遞name rowno,那麼實體物件的屬性名應該為name。如下 獲取頁面資料,自動封裝成bean物件 public list getobjectlist class clazz,string rownos thr...