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 的編程學習 閱讀(1465) 評論(0)  編輯  收藏 所屬分類: java 積累
          主站蜘蛛池模板: 阳春市| 石狮市| 华阴市| 沾化县| 宝应县| 洪雅县| 江达县| 桃园县| 开远市| 防城港市| 张掖市| 犍为县| 汝阳县| 东乌珠穆沁旗| 子长县| 阿尔山市| 二手房| 余干县| 宕昌县| 即墨市| 达州市| 张家口市| 郁南县| 澜沧| 营口市| 邳州市| 漯河市| 田东县| 大渡口区| 麦盖提县| 赞皇县| 健康| 甘肃省| 望谟县| 墨竹工卡县| 墨玉县| 潼南县| 图们市| 容城县| 奇台县| 蓬溪县|