Samuel Learning

  • 联系
  •  
  • 管理

文章分类(203)

  • 01 ASP/HTML(6)
  • 02 Script/CSS(16)
  • 03 C/C++
  • 04 XML(4)
  • 05 微软编程(26)
  • 06 J2EE(60)
  • 09 Linux(14)
  • 10 Database(27)
  • 11 报表打印
  • 12 打包安装(1)
  • 13 模式重构(2)
  • 14 系统架构
  • 15 敏捷开发(11)
  • 16 案例分析(30)
  • 17 Workflow(1)
  • 18 配置管理(1)
  • 19 项目管理
  • 20 英语(4)

新闻分类(52)

  • CXF学习
  • Hibernate学习(1)
  • iBatis学习(16)
  • Struts1学习(1)
  • Struts2学习(34)

.NET资源

  • adxmenu
  • C# Open Source
  • DNN Directory
  • M2Land
  • Windows Form FAQ
  • 中国DNN
  • 中国DNN联盟

Ajax

  • DoJo
  • GWT
  • JQuery
  • jquery autocomplete
  • jquery flexgrid
  • JQuery Form
  • jquery masked input
  • JQuery UI
  • jquery validation
  • Jquery 图表
  • jquery报表
  • jquery插件集合
  • Qooxdoo
  • Tibco GI
  • YUI
  • YUI-EXT
  • ZeroKode

Java开源

  • ABLE
  • Agile Tao
  • Ajax4JSF
  • Alfresco
  • AppFuse
  • Compiere
  • Equinox
  • Findbugs
  • Geronimo
  • Grails
  • Harmony
  • Hibernate论坛
  • JAG
  • Java开源大全
  • Java视线论坛
  • jBPM工作流
  • JSFTutorials
  • Nereide ERP
  • Ofbiz ERP
  • Opentaps ERP
  • operamasks
  • Petstore
  • Prototype.js
  • RIFE
  • Runa
  • SpringSide
  • Struts Menu
  • Sun Glassfish
  • Trails
  • YUI4JSF
  • 满江红

Mobile

  • Sencha

WEB资源

  • DHTML中心
  • DHTML参考手册
  • DHTML文档
  • EclipsePlugin
  • Firebug
  • GRO Clinux
  • jMaki
  • JSTL文档
  • LoadIcon
  • Openlaszlo
  • Struts Menu 展示
  • Web Test Tools
  • WebCtrs
  • Webdeveloper
  • 中国RIA开发者论坛

Workflow

  • E-Workflow
  • JBPM
  • OpenWFE
  • OSWorkflow
  • WFMC
  • Workflow Research

其他连接

  • confach
  • CPP
  • ejay
  • Giovanni
  • 丹佛
  • 交大e-learning
  • 交大研究生院
  • 可恶的猫
  • 天天@blog
  • 我的相册
  • 阿飞

大牛人

  • 32篇JBPM
  • David.Turing
  • HongSoft@业务集成
  • Joel
  • Koen Aers
  • Martinfowler
  • Raible Matt
  • Raible Wiki
  • Scott W.Ambler
  • Tom Baeyens
  • Uncle Bob
  • 一个世界在等待
  • 子在川上曰
  • 小布老师
  • 小明
  • 差沙
  • 徐昊
  • 江南白衣
  • 汪博士
  • 汪小金
  • 银狐999

开源软件

  • 2Bizbox ERP
  • CompiereCRM&ERP
  • EGW
  • Vtiger CRM
  • webERP

敏捷

  • Canoo
  • Cruisecontrol
  • DBUnit
  • EL4Ant
  • Extreme Programming
  • Fit
  • Fitnesse
  • JFrog
  • Liquibase
  • Maven
  • MockObjects
  • Selenium
  • Squish
  • xpairtise
  • XPlanner
  • XProgramming
  • 敏捷联盟

数据库

  • Oracle 中国
  • Oracle-ERP
  • Oracle在线社区

未归类

  • Aquarius Orm Studio
  • mambo建站系统
  • Oracle产品下载
  • 远程同步管理工具Capivara

经典框架

  • Apache Shale
  • formdef-struts
  • FreeMarker 主页
  • JBoss Seam
  • JSF 中心
  • JSF 入门应用
  • JSF中国
  • MyFaces官方
  • Spring 社区
  • Spring专业网站
  • Spring中文论坛
  • Spring参考手册
  • Spring官方网站
  • strecks-struts
  • Struts1
  • Struts2
  • Struts-layout
  • StrutsWiKi
  • Tapestry WIKI
  • Tapestry 官方
  • Tapestry4开发指南
  • Tapestry中文文档
  • Webwork2文档
  • Wicket

网络教程

  • Laliluna
  • RoseIndia
  • Sang Shin
  • Visualbuilder

著名站点

  • Buildix
  • Dev2Dev
  • IBM dev中国
  • InfoQ
  • ITPub
  • Java Eye
  • Java Research
  • JavaRead
  • JavaWorldTW
  • Matrix
  • PHP100
  • PHPX
  • SpringSideWiKi
  • TheServerSide
  • TWPHP
  • 中国工作流论坛

项目管理

  • 管理人网

最新评论

View Post

为AppFusex框架项目减肥

简单的看了一下SpringSide,发现里面的底层代码实现CRUD之后,实现新的类之后,不需要在重复实现这些代码。然后一看AppFuse,原来也有这个功能,只不过Matt 的User模块误导了。不涉及复杂业务的Service和Dao层根本没必要重写这些方法。以前浪费时间啊。
下面对比一下减肥前后的代码:
DAO--interface,注释的部分就是被减去的部分

public   interface  CustomerDao  extends  Dao  {
    
// Retrieve
//     public Customer getCustomer(Long customerId);
     public  List getCustomers(Customer customer);

    
// Create or Update
    
// public void saveCustomer(Customer customer);
    
    
// Delete
//     public void removeCustomer(Long customerId);
}

DAO--class,注释的部分就是被减去的部分

public   class  CustomerDaoHibernate  extends  BaseDaoHibernate  implements
        CustomerDao 
{

//     public Customer getCustomer(Long customerId) {
//         return (Customer) getHibernateTemplate().get(Customer.class,
//                 customerId);
//     }

    
public  List getCustomers(Customer customer)  {
        
return  getHibernateTemplate().find( " from Customer " );
    }


//     public void saveCustomer(Customer customer) {
//         getHibernateTemplate().saveOrUpdate(customer);
//
//     }

//     public void removeCustomer(Long customerId) {
//         Object customer = getCustomer(customerId);
//         getHibernateTemplate().delete(customer);
//     }

}


Service--interface
public interface CustomerManager extends Manager{
    
// Dependency Injection by set method
    public void setCustomerDao(CustomerDao customerDao);
    
//Query total
    
//public int getTotalCustomers(Customer c);
    
// Retrieve
    public List getCustomers(Customer customer);
//    public Customer getCustomer(Long customerId);
    
// Create or Update
//    public void saveCustomer(Customer customer);
    
// Delete
//    public void removeCustomer(Long customerId);
}

Service--class
public class CustomerManagerImpl extends BaseManager implements CustomerManager {

    
private CustomerDao customerDao;
    
    
//DI 
    public void setCustomerDao(CustomerDao customerDao) {
        
this.customerDao=customerDao;
    }


    
public List getCustomers(Customer customer) {
        
return customerDao.getCustomers(customer);
    }


//    public Customer getCustomer(Long customerId) {
//        return customerDao.getCustomer(customerId);
//    }

//    public void saveCustomer(Customer customer) {
//        //customerDao.saveCustomer(customer);
//        customerDao.saveObject(customer);
//    }

//    public void removeCustomer(Long customerId) {
//        
//        customerDao.removeCustomer(customerId);
//        customerDao.removeObject(new Customer().getClass(),customerId);
//    }
}


ManagedBean

 

public String edit() {
        
//customer = customerManager.getCustomer(new Long(getParameter("pkid")));
        customer = (Customer)customerManager.getObject(customer.getClass(),new Long(getParameter("pkid")));
        
return "edit";
    }


try {
            
//customerManager.saveCustomer(customer);
            customerManager.saveObject(customer);
        }
 catch (Exception e) {
            log.warn(e.getMessage());
            addError(
"add.customer.failed");
            
return null;
        }


//删除动作
    public String delete() {
        
//customerManager.removeCustomer(customer.getPkid());
        customerManager.removeObject(customer.getClass(),customer.getPkid());
        addMessage(
"delete.customer.success");
        
return "list";
    }

配置里需要添加一句,因为使用了底层的dao bean。
    <bean id="customerManager" parent="txProxyTemplate">
        
<property name="target">
            
<bean class="com.appwork.service.impl.CustomerManagerImpl">
                
<property name="customerDao" ref="customerDao"/>
                
<property name="dao" ref="dao"/>
            
</bean>
        
</property>
    
</bean>

接下来需要研究如何扩充查询的底层代码,实现复杂的查询,并且能在底层实现数据库级别的分页。

另外总结出一个结论:
自增长ID的POJO不需要在Dao实现update方法,save和update能够使用同一个方法;
人工赋值ID的POJO需要在Dao分别实现save方法和updagte方法。
原因:人工赋值ID的POJO无法区分出add 重复的对象,第二次add同一个对象,会执行update。

posted on 2006-09-07 23:25 MingIsMe 阅读(92) 评论(0)  编辑  收藏 所属分类: 06 J2EE

 
Powered by:
BlogJava
Copyright © MingIsMe