您的位置:首页 > 编程语言

J2EE开发中减少编写代码工作量的几种方法

2012-03-19 16:38 260 查看
减少编写代码工作量的几种方法:
参考项目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 <T> List<T> getAll(Class<T> entityClass) {

return getSqlMapClientTemplate().queryForList(entityClass.getName() + POSTFIX_SELECT, null);

}

对比一下反射的用法:

public List getObjects(Class clazz) {

return getSqlMapClientTemplate().queryForList(getSelectQuery(ClassUtils.getShortName(clazz)), null);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: