
com.denghb.eorm.impl.EormAbstractImpl Maven / Gradle / Ivy
package com.denghb.eorm.impl;
import com.denghb.eorm.Eorm;
import com.denghb.eorm.EormException;
import com.denghb.eorm.support.EormSupport;
import com.denghb.eorm.support.EormTraceSupport;
import com.denghb.eorm.support.model.Column;
import com.denghb.eorm.support.model.Table;
import com.denghb.eorm.support.model.Trace;
import com.denghb.eorm.utils.ReflectUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.GeneratedKeyHolder;
import org.springframework.jdbc.support.KeyHolder;
import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 核心实现
*/
public abstract class EormAbstractImpl implements Eorm {
protected JdbcTemplate jdbcTemplate;
protected NamedParameterJdbcTemplate namedParameterJdbcTemplate;
public EormAbstractImpl(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(jdbcTemplate);
}
@Override
public int execute(String sql, Object... args) {
EormTraceSupport.start();
Trace trace = EormTraceSupport.get();
sql = EormSupport.format(sql, args);
String tid = trace.getId();
Log log = LogFactory.getLog(trace.getLogName());
boolean logDebug = log.isDebugEnabled();
if (logDebug) {
log.debug(MessageFormat.format("{0} -> ({1})", trace.getLogMethod(), tid));
}
int affected = 0;
if (sql.contains(":") && null != args && 1 == args.length && !ReflectUtils.isSingleClass(args[0].getClass())) {// namedParameter
Object arg = args[0];
Map params = ReflectUtils.objectToMap(arg);
sql = EormSupport.parse(sql, params);
if (logDebug) {
log.debug(MessageFormat.format("({0}) -> Parameters :{1}", tid, Arrays.toString(args)));
log.debug(MessageFormat.format("({0}) -> Execute SQL :{1}", tid, sql));
}
affected = namedParameterJdbcTemplate.update(sql, params);
} else {
if (logDebug) {
log.debug(MessageFormat.format("({0}) -> Parameters :{1}", tid, Arrays.toString(args)));
log.debug(MessageFormat.format("({0}) -> Execute SQL :{1}", tid, sql));
}
affected = jdbcTemplate.update(sql, args);
}
if (logDebug) {
log.debug(MessageFormat.format("({0}) <- Affected :{1}", tid, affected));
log.debug(MessageFormat.format("({0}) <- Taking :{1}ms", tid, (System.currentTimeMillis() - trace.getStartTime())));
}
EormTraceSupport.end();
return affected;
}
@Override
public List select(Class clazz, String sql, Object... args) {
EormTraceSupport.start();
Trace trace = EormTraceSupport.get();
String tid = trace.getId();
Log log = LogFactory.getLog(trace.getLogName());
boolean logDebug = log.isDebugEnabled();
if (logDebug) {
log.debug(MessageFormat.format("{0} -> ({1})", trace.getLogMethod(), tid));
}
int size = 0;
List list = null;
if (sql.contains(":") && null != args && 1 == args.length && !ReflectUtils.isSingleClass(args[0].getClass())) {// namedParameter
Object object = args[0];
if (null == object) {
throw new EormException("args is not null");
}
Map params = ReflectUtils.objectToMap(object);
sql = EormSupport.parse(sql, params);
sql = EormSupport.format(sql, args);
if (logDebug) {
log.debug(MessageFormat.format("({0}) -> Parameters :{1}", tid, params));
log.debug(MessageFormat.format("({0}) -> Execute SQL :{1}", tid, sql));
}
if (ReflectUtils.isSingleClass(clazz)) {
list = namedParameterJdbcTemplate.queryForList(sql, params, clazz);
} else {
list = namedParameterJdbcTemplate.query(sql, params, BeanPropertyRowMapper.newInstance(clazz));
}
size = null != list ? list.size() : 0;
} else {
sql = EormSupport.format(sql, args);
if (logDebug) {
log.debug(MessageFormat.format("({0}) -> Parameters :{1}", tid, Arrays.toString(args)));
log.debug(MessageFormat.format("({0}) -> Execute SQL :{1}", tid, sql));
}
if (null == args || 0 == args.length || !sql.contains("?")) {
if (ReflectUtils.isSingleClass(clazz)) {
list = jdbcTemplate.queryForList(sql, clazz);
} else {
list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(clazz));
}
} else {
if (ReflectUtils.isSingleClass(clazz)) {
list = jdbcTemplate.queryForList(sql, clazz, args);
} else {
list = jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance(clazz), args);
}
}
size = null != list ? list.size() : 0;
}
if (logDebug) {
log.debug(MessageFormat.format("({0}) <- Affected :{1}", tid, size));
log.debug(MessageFormat.format("({0}) <- Taking :{1}ms", tid, (System.currentTimeMillis() - trace.getStartTime())));
}
EormTraceSupport.end();
return list;
}
@Override
public void insert(T domain) {
EormTraceSupport.start();
Table table = EormSupport.load(domain.getClass());
StringBuilder csb = new StringBuilder();
StringBuilder vsb = new StringBuilder();
final List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy