J2EE開發中減少編寫程式碼工作量的幾種方法
減少編寫程式碼工作量的幾種方法:
參考專案Struts2,Appfuse,Springside,Easyjf
1 使用模板生成程式碼
自定義模板變數和替換邏輯,velocity,freemaker,eclipse jet
基於annatation的xdoclet,java ee5
基於UML,XMI的MDA
2 使用反射機制
a) 完成物件-物件,物件到集合的複製
直接用commons-beanutils
b) 完成Recordset到domain object的轉換
下面是一種方法:
/////////////////////////////////////////////////////////////////////////////
//Function: 完成ResultSet物件向ArrayList物件為集合的物件的轉化
//Para:sql,指定的查詢Sql
//Para:className,Sql相對應得JavaBean/FormBean類的名字
//Return:以類className為一條記錄的結果集,完成ResultSet物件向ArrayList物件為集//合的className物件的轉化
//////////////////////////////////////////////////////////////////////////////
public ArrayList Select(String sql,String className){
ArrayList paraList=new ArrayList();
try{
if (conn == null){
Connection();
}
PreparedStatement stmt = conn.prepareStatement(sql);
ResultSet rs = stmt.executeQuery();
String recordValue="";
Object c1=null;
paraList=new ArrayList();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
while (rs.next()){
c1=Class.forName(className).newInstance();
for (int i=1; i<=columnCount; i++) {
if(rs.getString(rsmd.getColumnName(i))!=null){
recordValue=rs.getString(rsmd.getColumnName(i));
}else{
recordValue="";
}
Method m=c1.getClass().getMethod(getSetMethodName(rsmd.getColumnName(i)),new Class[]{recordValue.getClass()});
m.invoke (c1, new Object[]{recordValue});
}
paraList.add(c1);
}
}catch(SQLException ex){
}catch(ClassNotFoundException e){
}catch(NoSuchMethodException e) {
}catch(InvocationTargetException e){
}catch (IllegalAccessException e){
}catch(InstantiationException e){
} finaly{
closeConnection();
return paraList;
}
}
在JavaBean封裝的商業邏輯中呼叫Select 方法,然後在JSP頁面上顯示出來:
//Function:取得使用者列表
//Para:
//Return:返回使用者列表
/////////////////////////////////////////////////////////////////////////////
public ArrayList getUsers(){
ArrayList ret=null;
DatabaseManage db=new DatabaseManage();
String sql=" select usr_id,usr_name "
+" from users " ;
ret=db.Select(sql," com.bhsky. webis.system.UsersActionForm");
return ret;
}
還有一種方法:比如在EasyJf-DBO裡面將Recordset放到HashMap裡面,然後使用beanutils複製到物件裡面,相當於比上面的方法多了一個環節。
c) 在基類(抽象類)裡面使用,主要用在對物件的儲存,更新,刪除上
在DAO中實現CRUD的操作
public void insert(Object o) {
getSqlMapClientTemplate().insert(o.getClass().getName() + POSTFIX_INSERT, o);
}
在Struts Action中實現domain object到formbean的轉換,還可以實現其它的全域性操作,例如日誌
3 使用範型的方法,主要用在查詢方法中
在基類(抽象類)中使用,主要用在查詢的方法上
public List getAll(Class entityClass) {
return getSqlMapClientTemplate().queryForList(entityClass.getName() + POSTFIX_SELECT, null);
}
對比一下反射的用法:
public List getObjects(Class clazz) {
return getSqlMapClientTemplate().queryForList(getSelectQuery(ClassUtils.getShortName(clazz)), null);
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1504215
相關文章
- 編寫良好的程式碼:如何減少程式碼的認知負荷
- 減少C++程式碼編譯時間的方法C++編譯
- 看我用AspectJ切切切程式碼來減少工作量
- Webpack + Vue,部署時減少包體積的幾種方法WebVue
- 前端開發中減少重複勞動,提升效率的方法前端
- Vue 減少和服務端互動的樣板程式碼一種方法Vue服務端
- 程式中減少使用 if 語句的方法集錦
- 程式中減少使用if語句的方法集錦
- 減少程式碼中該死的 if else 巢狀巢狀
- 減少SQL日誌的三種方法(轉)SQL
- iOS 開發中 runtime 常用的幾種方法iOS
- 論減少程式碼中return語句的騷操作
- Java 8 中的方法引用,輕鬆減少程式碼量,提升可讀性!Java
- Django開發——003程式碼編寫Django
- 使用MVVM減少控制器程式碼實戰(減少56%)MVVM
- 相親交友原始碼開發中會用到的幾種日期處理方法原始碼
- Zen Coding: 一種快速編寫HTML/CSS程式碼的方法HTMLCSS
- iOS開發中的幾種鎖iOS
- 給VC編出的程式減肥,減少你程式的尺寸 (轉)
- 怎麼減少程式設計中的 bug?程式設計
- Optional簡化空值判斷,減少程式碼中的if-else程式碼塊
- 減少70%工作量 阿里開發商品智慧釋出系統加速推進數字新基建阿里
- J2EE專案程式碼編寫規範分享
- CSS 程式碼線上生成工具,讓你少寫幾百行程式碼~CSS行程
- [分享]iOS開發-UIAlertView的幾種觸發方法iOSUIView
- Go 庫存扣減的幾種實現方法Go
- pycharm一些減少程式碼warning的拼寫檢查設定PyCharm
- js呼叫後臺程式碼的幾種方法JS
- 減少運維工作量,如何透過 ROS 輕鬆實現資源編排新方式運維ROS
- 減少apk包大小的一種思路APK
- 減少SQL Server死鎖的方法SQLServer
- 相親原始碼開發,從程式碼級別減少資料請求次數的實現原始碼
- 寫程式碼有這16個好習慣,可以減少80%非業務的bug
- 最近寫了幾個 Laravel 擴充套件用來減少工作的麻煩Laravel套件
- 為什麼軟體開發,人多,事少,還會工作量大?
- 請列舉出多種減少頁面載入時間的方法
- 寫程式碼水平的幾個發展階段
- 編寫難於測試的程式碼的5種方式