
观到Hibernate您给1个对于象,他便能动静的创造摆设文献内里指定的表实,而后把数据录进到数据库,现在发觉是很奇妙,不外,彷佛Hibernate没有能动静的分表创造表战录进数据
尔那里写了1个公用的类,您给1个对于象,通知尔按年依旧按月死成表,并通知尔谁人字段是没有须要正在表中建树的,该类便能够动静的分表树立须要的表,并录进数据
注重:
因为营业须要,那里看待字段的撑持只要int战Integer,double战Double
另有String,共时对待String合并树立为了Varchar(100)的字段
表会团结创造1个id自删主键
packagecom.xd.nms.util;importjava.lang.reflect.Field;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Map;importjava.util.Set;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.springframework.jdbc.core.JdbcTemplate;/***@评释动静拔出数据战创立表*@author崔素强*@version1.0*@since*/publicclassCommonTableInsert{publicstaticLoglogger=LogFactory.getLog(CommonTableInsert.class);/***进心办法*@paramtableName表前缀*@paramdateFormat花样化办法*@paramobj保管的对于象*@return*/@SuppressWarnings("unchecked")publicstaticintinsertObject(StringtableName,StringdateFormat,Objectobj,MapnoCol){intre=0;try{JdbcTemplatejt=(JdbcTemplate)SpringFactory.getObject("jdbcTemplate");SimpleDateFormatformat=newSimpleDateFormat(dateFormat);Stringtname=tableName+"_"+format.format(newDate());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(Exceptione){logger.error("公用办法拔出数据进心办法缺陷",e);}returnre;}/***保管办法,注重那里传送的是实质的表的称呼*/@SuppressWarnings("unchecked")privatestaticintsaveObj(JdbcTemplatejt,StringtableName,Objectobj,MapnoCol){intre=0;StringBuffersb=newStringBuffer("");try{sb.append("insertinto"+tableName+"(");Map<String,String>map=ObjectUtil.getProAndValMap(obj);//对于象的属性战属性值Map<String,String>mapType=ObjectUtil.getProTypeMap(obj);//对于象的属性类别列表Set<String>set=map.keySet();for(Stringkey:set){//借使该列没有是非处置列if(noCol.get(key)==null){sb.append(key+",");}}sb.append("tableName)");sb.append("values(");for(Stringkey:set){if(noCol.get(key)==null){if(mapType.get(key).equals("classjava.lang.String")){sb.append("'"+(map.get(key)+"',"));}else{sb.append(map.get(key)+",");}}}sb.append("'"+tableName+"');");re=jt.update(sb.toString());}catch(Exceptione){logger.error("公用办法录进数据时故障",e);logger.error("公用办法录进数据语句:"+sb.toString());}returnre;}/***凭据表称呼战真体属性创造1弛表*@paramtableName*@paramobj详细死成甚么样的表瞅该对于象*/@SuppressWarnings("unchecked")privatestaticintcreateTable(JdbcTemplatejt,StringtableName,Objectobj,MapnoCol){StringBuffersb=newStringBuffer("");sb.append("CREATETABLE`"+tableName+"`(");sb.append("`id`int(11)NOTNULLAUTO_INCREMENT,");Classc=obj.getClass();Fieldfield[]=c.getDeclaredFields();for(Fieldf:field){if(noCol.get(f.getName())==null){Stringtype=f.getType().toString();if(type.equals("classjava.lang.String")){//Strsb.append("`"+f.getName()+"`varchar(100)DEFAULTNULL,");}elseif(type.equals("int")||type.equals("classjava.lang.Integer")){//intsb.append("`"+f.getName()+"`int(11)DEFAULTNULL,");}elseif(type.equals("double")||type.equals("classjava.lang.Double")){//doublesb.append("`"+f.getName()+"`doubleDEFAULTNULL,");}}}sb.append("`tableName`varchar(255)DEFAULTNULL,");sb.append("PRIMARYKEY(`id`)");sb.append(")ENGINE=InnoDBDEFAULTCHARSET=utf8;");try{jt.update(sb.toString());return1;}catch(Exceptione){logger.error("公用办法死成表时毛病",e);logger.error("公用办法死成表语句:"+sb.toString());}return0;}}那个对待之前写的谁人动静修表,新删了过滤没有须要正在表中创办的字段
道理便是读与对于象的各个字段属性,即使能添以装备文献大概读与对于象属性的符号,那本来能干到基础战Hibernate分歧,没有但能救援多品种型,借能干字段校验等。
注重那是1个系列的作品,注重先后几篇著作。
推举您浏览更多相关于“ java数据库分表动静修表动静看望 ”的作品
地址:南京市科巷10号楼(邮政储蓄银行西北侧80米) 电话:400-080-3312
Copyright © 2024-2026 学码思推广专用站 http://www.xuems.net .All Rights Reserved 网站地图 苏ICP备16033487号-3