lizongbo 的 编程学习

http://618119.com

BlogJava 首页 新随笔 联系 聚合 管理
  23 Posts :: 1 Stories :: 78 Comments :: 0 Trackbacks

关于代码生成器反复生成代码的设计。

我以前的做法是先生成尽可能详细的代码。
(生成findby方法基本把每个字段都列在了查询条件里,包括一些基本用不到的)
然后只需要复制其中的代码片断来完成需要新加的方法。
前几天在表中增加字段之后,手工写了不少代码 :(((

charon@xxx 的回复的提示,结合myeclipse生成 pojo的思路,
对我的代码生成器进行改进,作以下处理。

以dao为例(其它logic等均作类似处理),定义两个接口。和对应两个实现。

写成四个模板文件。

比如IpojoBaseDAO.java,pojoBaseDAOImpl.java abstract的,但是实现IpojoBaseDAO里的方法。
这个是可以反复生成的。

再定义两个继承类模板。
IpojoDAO.java 继承自IpojoBaseDAO
pojoDAOImpl.java 继承自 pojoBaseDAOImpl。实现IpojoDAO。
这两个文件只需要生成一次,以后自己增加的代码都在这里。
在第一次生成好代码之后,把这两文件名后缀改为.bak.这样再运行代码生成器的时候就不会再生成了。


不废话了,看生成的效果。

接口:
IBlogPostBaseDAO.java
////本文件可以反复生成。
public interface IBlogPostBaseDAO{

    void addBlogPost(BlogPost blogPost);
        List findBlogPostby(
            java.lang.String blogNo,   
            java.util.Date addtime_begin,
            java.util.Date addtime_end,
            java.lang.String blogUserName,
            java.lang.String blogTitle,
            java.lang.String blogContent,
            java.lang.String blogSummary,
            Pagination page);
}

IBlogPostDAO.java

//本文件只需要生成一次
public interface IBlogPostDAO extends  IBlogPostBaseDAO{

    void testBlogPost(BlogPost blogPost); //在这里增加手工补充的具体接口方法
}

BlogPostHibernateBaseDAO.java
//本文件可以反复生成。
public class BlogPostHibernateBaseDAO extends HibernateBaseDAOSupport implements IBlogPostDAO {
        private static final transient Logger log = Logger.getLogger(BlogPostHibernateBaseDAO.class);
        public BlogPostHibernateBaseDAO() {
        }
   
    public void addBlogPost(BlogPost blogPost){
      this.getHibernateTemplate().save(blogPost);
    }
//多条件分页查询
    public List findBlogPostby(
        final java.lang.String blogNo,   
        final java.util.Date addtime_begin,
        final java.util.Date addtime_end,
        final java.lang.String blogUserName,
        final java.lang.String blogTitle,
        final java.lang.String blogContent,
        final java.lang.String blogSummary,
        final Pagination page){
    return (List)this.getHibernateTemplate().execute(
                new HibernateCallback() {
            public Object doInHibernate(Session session) throws SQLException,
                    HibernateException {
                Criteria ca = session.createCriteria(BlogPost.class);
                if (blogNo != null && blogNo.length() > 0) {
                        ca.add(Expression.like("blogNo", blogNo, MatchMode.ANYWHERE));
                    }
                if (addtime_begin != null) {
                        ca.add(Expression.ge("addtime", addtime_begin));
                }
                if (addtime_end != null) {
                        ca.add(Expression.le("addtime", addtime_end));
                }
                if (blogUserName != null && blogUserName.length() > 0) {
                        ca.add(Expression.like("blogUserName", blogUserName, MatchMode.ANYWHERE));
                }
                if (blogTitle != null && blogTitle.length() > 0) {
                        ca.add(Expression.like("blogTitle", blogTitle, MatchMode.ANYWHERE));
                }
                if (blogContent != null && blogContent.length() > 0) {
                        ca.add(Expression.like("blogContent", blogContent, MatchMode.ANYWHERE));
                }
                if (blogSummary != null && blogSummary.length() > 0) {
                        ca.add(Expression.like("blogSummary", blogSummary, MatchMode.ANYWHERE));
                }
         if (page != null) {
                page.setTotalNum(((Integer) ca.setProjection(Projections.
                        rowCount()).uniqueResult()).intValue());
         }
                ca.setProjection(null);
                    ca.addOrder(Order.desc("addtime"));//

        if (page != null) {
                ca.setMaxResults(page.getPageSize());
                ca.setFirstResult(page.getStartIndex());
        }
                return ca.list();
            }
        }, true);
    }
    }
BlogPostHibernateDAO.java
//本文件只需要生成一次
    public class BlogPostHibernateDAO extends BlogPostHibernateBaseDAO implements IBlogPostDAO{
        private static final transient Logger log = Logger.getLogger(BlogPostHibernateDAO.class);
        public BlogPostHibernateDAO() {
        }
   
    public void testBlogPost(BlogPost blogPost){
      //手工的代码了
    }

}

以上代码,除了斜线后的注释,都是代码生成器生成的,受篇幅限制,作了大量的删减


 

posted on 2006-04-26 14:08 lizongbo 的编程学习 阅读(1454) 评论(0)  编辑  收藏 所属分类: java 积累