JavaBean 工具:updar
- upDar,javaBean工具
- 為更簡潔的操作javaBean,對javaBean進行簡單設置即可達到目的,減少對javaBean操作冗余代碼.
- 當然要慢慢來. </ul>
- 演示例子 </ul>
- 依賴的jar包
- 1. json-lib-2.4-jdk15.jar
- 2. commons-beanutils-1.8.3.jar
- 3. commons-collections-3.1.jar
- 4. commons-lang-2.4.jar
- 5. commons-logging-1.1.1.jar
- 6. ezmorph-1.0.6.jar </ul>
- 下載全部 </ul>
- 項目成熟度狀態
- 目前版本為upDar0.0.0-beta , 測試版 </ul>
- 為什么要做這個東西
- 在以往開發中,我使用的是ssh框架,有個問題一直讓我很疑惑,到底該怎么實現. </ul>
- 當我們update操作的時候,有時并不需要把一個model的所有屬性都去更新,例如狀態等信息是不能被update的. </ul>
- 但是,用ssh在前臺傳入參數保存到action中后,model中的屬性是不可預估的,有可能存在不能更新的屬性,但是當使用hibernate的update方法時,那么整個對象的全部屬性都被update.會出現很多問題. </ul>
- 起初我的解決方法是,在數據庫中查出需要修改的model對象,把需要更改的屬性一個個set進去.結果大量冗余代碼出現.于是放棄這種寫法. </ul>
- 使用org.springframework.beans.BeanUtils.copyProperties(Object source, Object target, String[] ignoreProperties)方法,這個方法的作用是,ignoreProperties中存放了不可被修改的屬性名,source是需要被修改的 model,target是提供修改數據的model. </ul>
- 起初很好用,可后來發現一個問題,有一個用戶對象,我們已經對他寫好了update方法,并用copyProperties方法對 model進行了更新,可隨著項目的擴大,用戶中需要增加一個屬性,但是之前的update方法不可修改這個屬性,顯然,我們已經記不得再哪使用了 copyProperties方法了,我們不能逐個去修改ignoreProperties參數. </ul>
- 于是我覺得應該需要一種更好的方式去解決updateModel的問題了. </ul>
- 這樣我就寫出了一些代碼,用來分享給大家. </ul>
- 思路 </ul>
- 對model的屬性進行分組,這樣當更新model的時候,只需要傳入需要修改的model 和提供數據的model 和需要更新屬性的分組名稱即可. </ul>
- 設置分組方式:通過注解方式,在model屬性的set方法上添加注解,以標注該屬性所屬分組名稱.這樣當update方法寫好后,若出現任何model屬性變化,屬性名變化都只需要更改model的 注解配置即可,無需修改update方法. </ul>
- 以這種思路去解決updateModel的問題,我覺得是再好不過,而本工具則實現了這一解決方案. </ul>
- 許可證 </ul>
- Copyright [2014] [upDar] Apache License, Version 2.0 </ul>
- 例子: </ul>
- 問題 </ul>
- 假設有個Cat類,內有以下4個屬性,切get、set方法都存在 </ul>
private String name; //名字private String colors; //毛色
private Integer age; //年齡
private Double height; //身長</pre>
- 這時,通過http請求,在action中接受到一個Cat對象,現在需要對該對象進行保存。
- 但,用戶只能修改Cat的名字和毛色。我們應該怎樣操作 </ul>
- 示例 </ul>
- 1.分組: 我們把確定能夠更改的Cat類屬性進行分組,例如,name和colors可以進行修改那么我們把他們分為一組,假設組名叫“def”。 </ul>
*通過注解方式對Cat類的屬性進行分組,方法如下:
@PropertyConfig(groupNames = {"def"}) public void setColors(String colors) { this.colors = colors; }@PropertyConfig(groupNames = {"def"}) public void setName(String name) { this.name = name; }</pre> <p></p>
- 2.調用方法:BeanTools.updateModel(Object srcModel, Object dataModel,String groupName)
- srcModel -需要更新的model
- dataModel -提供數據的model
- groupName -需要更新的屬性組名 </ul> </li> </ul>
例如:
Cat catA = new Cat(); Cat catB = new Cat();
catA.setName("喵了"); catA.setColors("red"); catA.setAge(5); catA.setHeight(50D); catB.setName("個咪"); catB.setColors("blue"); catB.setAge(2); catB.setHeight(20D); System.out.println("調用前catA&catB"); System.out.println("catA:"+catA.toString()); System.out.println("catB:"+catB.toString()); BeanTools.updateModel(catA, catB, "def"); //調用方法 System.out.println("調用后catA&catB"); System.out.println("catA:"+catA.toString()); System.out.println("catB:"+catB.toString());</pre> <p></p>
- 輸出結果(我已經為Cat對象重寫了toString()方法了)
調用前catA&catB 調用前catA&catB catA:{ age:5, colors:red, height:50, name:喵了 } catB:{ age:2, colors:blue, height:20, name:個咪 } 調用后catA&catB catA:{ age:5, colors:blue, height:50, name:個咪 } catB:{ age:2, colors:blue, height:20, name:個咪 }
</ul>
- 由此可看出,只有def組的Cat類屬性進行了update,而不屬于該組的則沒有被修改。
- 因此,解決了本教程之前的問題。 </ul>
整理下catA的屬性變化
屬性名 catA前 catA后 catB屬性 所屬組 </tr>age 5 5 2 </tr>
colors red blue blue def </tr>height 50 50 20 </tr>
name 喵了 個咪 個咪 def </tr> </tbody> </table>
可參考:com.wuliaosile.updar.test.example.update.Example1 類里的main方法
http://code.taobao.org/p/updar/src/本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!相關經驗
相關資訊
sesese色