

您好,欢迎访问上海贝乐莉网络科技有限公司!
观到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数据库分表动静修表动静盘查 ”的作品