电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:8日期: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
相關文章:
主站蜘蛛池模板: GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 找培训机构_找学习课程_励普教育| 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 标准光源箱|对色灯箱|色差仪|光泽度仪|涂层测厚仪_HRC大品牌生产厂家 | 江西自考网-江西自学考试网 | 奶茶加盟,奶茶加盟店连锁品牌-甜啦啦官网| 分轨 | 上传文件,即刻分离人声和伴奏 | 卷筒电缆-拖链电缆-特种柔性扁平电缆定制厂家「上海缆胜」 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 寮步纸箱厂_东莞纸箱厂 _东莞纸箱加工厂-东莞市寮步恒辉纸制品厂 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 「阿尔法设计官网」工业设计_产品设计_产品外观设计 深圳工业设计公司 | 高精度电阻回路测试仪-回路直流电阻测试仪-武汉特高压电力科技有限公司 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 塑木弯曲试验机_铜带拉伸强度试验机_拉压力测试台-倾技百科 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 陶瓷加热器,履带式加热器-吴江市兴达电热设备厂 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | ALC墙板_ALC轻质隔墙板_隔音防火墙板_轻质隔墙材料-湖北博悦佳 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 压接机|高精度压接机|手动压接机|昆明可耐特科技有限公司[官网] 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 金蝶帐无忧|云代账软件|智能财税软件|会计代账公司专用软件 | 高温高压釜(氢化反应釜)百科| 北京发电车出租-发电机租赁公司-柴油发电机厂家 - 北京明旺盛安机电设备有限公司 | 361°官方网站| 大连海岛旅游网>>大连旅游,大连海岛游,旅游景点攻略,海岛旅游官网 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 塑钢件_塑钢门窗配件_塑钢配件厂家-文安县启泰金属制品有限公司 深圳南财多媒体有限公司介绍 | 锌合金压铸-铝合金压铸厂-压铸模具-冷挤压-誉格精密压铸 | 可程式恒温恒湿试验箱|恒温恒湿箱|恒温恒湿试验箱|恒温恒湿老化试验箱|高低温试验箱价格报价-广东德瑞检测设备有限公司 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 济南网站建设|济南建网站|济南网站建设公司【济南腾飞网络】【荐】 | 长江船运_国内海运_内贸船运_大件海运|运输_船舶运输价格_钢材船运_内河运输_风电甲板船_游艇运输_航运货代电话_上海交航船运 | FAG轴承,苏州FAG轴承,德国FAG轴承-恩梯必传动设备(苏州)有限公司 | 好物生环保网、环保论坛 - 环保人的学习交流平台 | 东莞市海宝机械有限公司-不锈钢分选机-硅胶橡胶-生活垃圾-涡电流-静电-金属-矿石分选机 | 艾默生变频器,艾默生ct,变频器,ct驱动器,广州艾默生变频器,供水专用变频器,风机变频器,电梯变频器,艾默生变频器代理-广州市盟雄贸易有限公司官方网站-艾默生变频器应用解决方案服务商 | 高扬程排污泵_隔膜泵_磁力泵_节能自吸离心水泵厂家-【上海博洋】 | 曙光腾达官网-天津脚手架租赁-木板架出租-移动门式脚手架租赁「免费搭设」 |