傳入Java對象 自動建立動態表 並錄入資料__JAVA學習

來源:互聯網
上載者:User

看到Hibernate你給一個對象,他就能動態建立設定檔裡面指定的表名,然後把資料錄入到資料庫,當初感覺是很神奇,不過,好像Hibernate不能動態分表建立表和錄入資料

我這裡寫了一個公用的類,你給一個對象,告訴我按年還是按月產生表,並告訴我那個欄位是不需要在表中建立的,該類就可以動態分表建立需要的表,並錄入資料

注意:

由於業務需要,這裡對於欄位的支援只有int和Integer,double和Double

還有String,同時對於String統一建立為了Varchar(100)的欄位

表會統一建立一個id自增主鍵

  Java代碼   package com.xd.nms.util;   import java.lang.reflect.Field;   import java.text.SimpleDateFormat;   import java.util.Date;   import java.util.Map;   import java.util.Set;   import org.apache.commons.logging.Log;   import org.apache.commons.logging.LogFactory;   import org.springframework.jdbc.core.JdbcTemplate;   /**   * @說明 動態插入資料和建立表   * @author 崔素強   * @version 1.0   * @since   */   public class CommonTableInsert {       public static Log logger = LogFactory.getLog(CommonTableInsert.class);       /**       * 入口方法       * @param tableName 表首碼       * @param dateFormat 格式化方法       * @param obj 儲存的對象       * @return       */       @SuppressWarnings("unchecked")       public static int insertObject(String tableName,String dateFormat,Object obj, Map noCol){           int re = 0;                   try {                  JdbcTemplate jt = (JdbcTemplate) SpringFactory.getObject("jdbcTemplate");               SimpleDateFormat format = new SimpleDateFormat(dateFormat);                            String tname = tableName + "_" + format.format(new Date());               if(CommonDBUtil.getAllTableName(jt,tname)){ // 如果有某表                   re = saveObj(jt,tname,obj, noCol); // 儲存資料                  }else{                   re = createTable(jt,tname,obj, noCol); // 動態建立表                   if(re == 1){                       re = saveObj(jt,tname,obj, noCol); // 儲存資料                   }               }                         } catch (Exception e) {                  logger.error("公用方法插入資料入口方法錯誤", e);           }                     return re;          }       /**         * 儲存方法,注意這裡傳遞的是實際的表的名稱         */         @SuppressWarnings("unchecked")       private static int saveObj(JdbcTemplate jt,String tableName,Object obj, Map noCol){              int re = 0;           StringBuffer sb = new StringBuffer("");           try{                              sb.append(" insert into " + tableName + " (");                  Map<String,String> map = ObjectUtil.getProAndValMap(obj); // 對象的屬性和屬性值               Map<String,String> mapType = ObjectUtil.getProTypeMap(obj); // 對象的屬性類型列表               Set<String> set = map.keySet();                  for(String key : set){                   // 如果該列不是 非處理列                   if(noCol.get(key) == null){                       sb.append(key + ",");                   }               }                  sb.append(" tableName ) ");                               sb.append(" values ( ");                  for(String key : set){                   if(noCol.get(key) == null){                       if(mapType.get(key).equals("class java.lang.String")){                           sb.append("'" + (map.get(key) + "',"));                       }else{                           sb.append(map.get(key) + ",");                       }                   }               }                  sb.append("'" + tableName + 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.