JavaBean 工具:updar

jopen 10年前發布 | 11K 次閱讀 updar Java開發

  • 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>
                                                    

sesese色