J2EE开发中减少编写代码工作量的几种方法
来源:互联网 发布:软件测试培训视频 编辑:程序博客网 时间:2024/06/05 13:32
减少编写代码工作量的几种方法:
参考项目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
return getSqlMapClientTemplate().queryForList(entityClass.getName() + POSTFIX_SELECT, null);
}
对比一下反射的用法:
public List getObjects(Class clazz) {
return getSqlMapClientTemplate().queryForList(getSelectQuery(ClassUtils.getShortName(clazz)), null);
}
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- J2EE开发中减少编写代码工作量的几种方法
- 几种测试工作量的估算方法
- 几种测试工作量的估算方法
- asp网页提升速度方法5则
- SQL Server 2005 中的树形数据处理示例-2
- 转贴:libunwind文档
- 发现Google地图两个严重的缺陷
- .NET / Rotor源码研究3 – 调试Rotor托管代码的利器:WinDbg和SOS
- J2EE开发中减少编写代码工作量的几种方法
- "微软收购Zend"假新闻看开源需要新心态
- 敏捷开发案例:用白板解决项目管理和团队沟通
- 进程编程2 – Unix环境高级编程8章读书笔记
- Zend Framework 0.1.3 Released铪铪铪
- 代码评审的最佳实践
- 信息化给企业带来的好处
- Visual WebGui 基于ajax的界面框架
- TIOBE 2006年7月最流行开发语言排名 VB.Net再度下滑