国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Hibernate傳入Java對象創建動態表并錄入數據

瀏覽:4日期:2022-08-21 16:47:54

看到Hibernate你給一個對象,他就能動態的創建配置文件里面指定的表名,然后把數據錄入到數據庫,當初感覺是很神奇,不過,好像Hibernate不能動態的分表創建表和錄入數據

我這里寫了一個公用的類,你給一個對象,告訴我按年還是按月生成表,并告訴我那個字段是不需要在表中創建的,該類就可以動態的分表創建需要的表,并錄入數據

注意:

由于業務需要,這里對于字段的支持只有int和Integer,double和Double

還有String,同時對于String統一創建為了Varchar(100)的字段

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

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 + '’); ');re = jt.update(sb.toString()); } catch (Exception e) { logger.error('公用方法錄入數據時錯誤', e); logger.error('公用方法錄入數據語句:' + sb.toString()); } return re; } /** * 根據表名稱 和 實體屬性 創建一張表 * @param tableName * @param obj 具體生成什么樣的表看該對象 */ @SuppressWarnings('unchecked') private static int createTable(JdbcTemplate jt,String tableName,Object obj, Map noCol){ StringBuffer sb = new StringBuffer(''); sb.append('CREATE TABLE `' + tableName + '` ('); sb.append(' `id` int(11) NOT NULL AUTO_INCREMENT,'); Class c = obj.getClass(); Field field[] = c.getDeclaredFields(); for (Field f : field) { if(noCol.get(f.getName()) == null){ String type = f.getType().toString(); if(type.equals('class java.lang.String')){// Str sb.append('`' + f.getName() + '` varchar(100) DEFAULT NULL,'); }else if(type.equals('int') || type.equals('class java.lang.Integer')){// int sb.append('`' + f.getName() + '` int(11) DEFAULT NULL,'); }else if(type.equals('double') || type.equals('class java.lang.Double')){// double sb.append('`' + f.getName() + '` double DEFAULT NULL,'); } } } sb.append(' `tableName` varchar(255) DEFAULT NULL,'); sb.append(' PRIMARY KEY (`id`)'); sb.append(') ENGINE=InnoDB DEFAULT CHARSET=utf8;'); try { jt.update(sb.toString()); return 1; } catch (Exception e) { logger.error('公用方法生成表時錯誤', e); logger.error('公用方法生成表語句:' + sb.toString()); } return 0; } }

這個對于之前寫的那個動態建表,新增了過濾不需要在表中創建的字段

原理就是讀取對象的各個字段屬性,如果能加以配置文件或者讀取對象屬性的標記,那其實能做到基本和Hibernate一致,不但能支持多種類型,還能做字段校驗等

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲精国产一区二区三区 | 久久99精品九九九久久婷婷 | 成年人三级网站 | 最近中文字幕精彩视频 | 日本人的色道www免费一区 | 日韩激情中文字幕一区二区 | 国产欧美日本在线 | 午夜刺激爽爽视频免费观看 | 国产亚洲精品日韩已满十八 | 欧美色老头oldvideos | 九九在线精品 | 国产在视频线精品视频www666 | 女人扒开双腿让男人捅 | 亚洲自拍成人 | 欧美视频在线看 | 日本成人在线免费 | 免费小视频在线观看 | 国产90后美女露脸在线观看 | 又黄又湿又爽 | 欧美日韩亚洲成色二本道三区 | a级毛片免费在线观看 | 免费看a级| 国产理论最新国产精品视频 | 日韩一级片在线播放 | 深夜福利爽爽爽动态图 | caoporen在线视频入口 | 经典三级在线视频 | 一级毛片aaa| 欧美日韩精品一区二区在线线 | 日本不卡不码高清免费观看 | 国外成人在线视频 | 免费看的一级片 | 国产精品久久久久毛片 | 国产精品久久久久久久久久一区 | 一区二区三区免费精品视频 | 日本暖暖视频在线播放 | 五月久久噜噜噜色影 | 中国一级做a爱片免费 | 91免费网站在线看入口黄 | 一级毛片在线完整免费观看 | 香蕉成人在线 |