자바 대상 에 게 자동 으로 동적 표를 만 들 고 데 이 터 를 입력 합 니 다.
6367 단어 Hibernatejdbc동적 표최 소 강cuisuqiang
나 는 여기에 공용 클래스 를 썼 다. 너 는 대상 에 게 해마다 표를 만 드 는 지 월 별로 표를 만 드 는 지 알려 주 고 그 필드 는 표 에서 만 들 필요 가 없다 고 알려 주 었 다. 이 클래스 는 동적 으로 표를 나 누 어 필요 한 표를 만 들 고 데 이 터 를 입력 할 수 있다.
주의:
업무 수요 로 인해 필드 에 대한 지원 은 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 와 일치 할 수 있 습 니 다. 다양한 유형 을 지원 할 뿐만 아니 라 필드 검사 도 할 수 있 습 니 다.
ITEYE 사이트 에 가서 오리지널 을 보 세 요. 감사합니다!
http://cuisuqiang.iteye.com/ !
자체 블 로그 주소: http://www.javacui.com/, 내용 은 ITEYE 와 동기 화 됩 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JPA] 즉시로딩(EAGER)과 지연로딩(LAZY) (왜 LAZY 로딩을 써야할까?) (1)Proxy는 이 글의 주제인 즉시로딩과 지연로딩을 구현하는데 중요한 개념인데, 일단 원리는 미뤄두고 즉시로딩과 지연로딩이 무엇인지에 대해 먼저 알아보자. 눈 여겨 볼 곳은 'fetch = FetchType.EAGER...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.