午夜剧场伦理_日本一道高清_国产又黄又硬_91黄色网战_女同久久另类69精品国产_妹妹的朋友在线

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Hibernate傳入Java對(duì)象創(chuàng)建動(dòng)態(tài)表并錄入數(shù)據(jù)

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

看到Hibernate你給一個(gè)對(duì)象,他就能動(dòng)態(tài)的創(chuàng)建配置文件里面指定的表名,然后把數(shù)據(jù)錄入到數(shù)據(jù)庫(kù),當(dāng)初感覺(jué)是很神奇,不過(guò),好像Hibernate不能動(dòng)態(tài)的分表創(chuàng)建表和錄入數(shù)據(jù)

我這里寫(xiě)了一個(gè)公用的類(lèi),你給一個(gè)對(duì)象,告訴我按年還是按月生成表,并告訴我那個(gè)字段是不需要在表中創(chuàng)建的,該類(lèi)就可以動(dòng)態(tài)的分表創(chuàng)建需要的表,并錄入數(shù)據(jù)

注意:

由于業(yè)務(wù)需要,這里對(duì)于字段的支持只有int和Integer,double和Double

還有String,同時(shí)對(duì)于String統(tǒng)一創(chuàng)建為了Varchar(100)的字段

表會(huì)統(tǒng)一創(chuàng)建一個(gè)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; /** * @說(shuō)明 動(dòng)態(tài)插入數(shù)據(jù)和創(chuàng)建表 * @author 崔素強(qiáng) * @version 1.0 * @since */ public class CommonTableInsert { public static Log logger = LogFactory.getLog(CommonTableInsert.class); /** * 入口方法 * @param tableName 表前綴 * @param dateFormat 格式化方法 * @param obj 保存的對(duì)象 * @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); // 保存數(shù)據(jù) }else{ re = createTable(jt,tname,obj, noCol); // 動(dòng)態(tài)創(chuàng)建表 if(re == 1){ re = saveObj(jt,tname,obj, noCol); // 保存數(shù)據(jù) } } } catch (Exception e) { logger.error('公用方法插入數(shù)據(jù)入口方法錯(cuò)誤', e); } return re; } /** * 保存方法,注意這里傳遞的是實(shí)際的表的名稱(chēng) */ @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); // 對(duì)象的屬性和屬性值 Map<String,String> mapType = ObjectUtil.getProTypeMap(obj); // 對(duì)象的屬性類(lèi)型列表 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('公用方法錄入數(shù)據(jù)時(shí)錯(cuò)誤', e); logger.error('公用方法錄入數(shù)據(jù)語(yǔ)句:' + sb.toString()); } return re; } /** * 根據(jù)表名稱(chēng) 和 實(shí)體屬性 創(chuàng)建一張表 * @param tableName * @param obj 具體生成什么樣的表看該對(duì)象 */ @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('公用方法生成表時(shí)錯(cuò)誤', e); logger.error('公用方法生成表語(yǔ)句:' + sb.toString()); } return 0; } }

這個(gè)對(duì)于之前寫(xiě)的那個(gè)動(dòng)態(tài)建表,新增了過(guò)濾不需要在表中創(chuàng)建的字段

原理就是讀取對(duì)象的各個(gè)字段屬性,如果能加以配置文件或者讀取對(duì)象屬性的標(biāo)記,那其實(shí)能做到基本和Hibernate一致,不但能支持多種類(lèi)型,還能做字段校驗(yàn)等

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 成人免费毛片视频 | 亚洲综合在线视频 | 特级西西 | 亚洲25p| 免费av网址在线观看 | 日韩一级黄 | 国产一区自拍视频 | 噜噜噜在线视频 | www.亚洲国产 | 欧美一区二区三区四区五区六区 | 欧美黄色大片视频 | 午夜精品二区 | 欧美啪啪小视频 | 日韩视频在线免费播放 | 国产999久久久 | 国产黄a三级 | 日韩一级片免费看 | 黄色裸体视频 | 日本亚洲黄色 | 精品免费在线 | 国产美女永久免费 | 久久中文字 | 久草精品在线 | 亚洲三级视频在线观看 | 99热这里只有精品8 h片免费在线观看 | 国产欧美高清 | 久久人人人 | 黄色一级黄色片 | 91大神精品 | av女优写真 | 日韩美女在线视频 | xxx日本在线观看 | 三级av在线 | 欧美亚洲第一页 | 韩国美女毛片 | 日韩在线观看一区二区 | 丁香激情五月少妇 | 亚洲国内精品 | 麻豆精品国产免费 | 午夜免费精品 | 四虎影视av |