
pers.zr.opensource.magic.dao.mapper.GenericMapper Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of magic-dao Show documentation
Show all versions of magic-dao Show documentation
simplify to access database with java.
package pers.zr.opensource.magic.dao.mapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jdbc.core.RowMapper;
import pers.zr.opensource.magic.dao.constants.MethodType;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;
/**
* Created by zhurong on 2016-5-6.
*/
public class GenericMapper implements RowMapper {
private static Log log = LogFactory.getLog(GenericMapper.class);
private Class entityClass;
public GenericMapper(Class entityClass) {
this.entityClass = entityClass;
}
@Override
public ENTITY mapRow(ResultSet rs, int i) throws SQLException {
ENTITY entity;
try {
entity = this.entityClass.newInstance();
ResultSetMetaData meta = rs.getMetaData();
for(int k=1; k<=meta.getColumnCount(); k++) {
String column = meta.getColumnName(k);
Field field = MapperContextHolder.getFieldWithColumn(entityClass, column);
if(field == null) {
continue;
}
Method setMethod = MapperContextHolder.getMethod(entityClass, field, MethodType.SET);
if(setMethod == null) {
continue;
}
Object value = getValue4Type(rs, column, setMethod.getParameterTypes()[0]);
if(value != null) {
setMethod.invoke(entity, value);
}
}
} catch (Exception e) {
log.error("Failed to bind data to entity", e);
throw new SQLException(e);
}
return entity;
}
public static Object getValue4Type(ResultSet rs, String column, Class> typeClass) throws SQLException {
if (Collection.class.isAssignableFrom(typeClass)) {
return null;
}
try {
rs.findColumn(column);
} catch (Exception e) {
log.error(e.getMessage(), e);
return null;
}
if (typeClass.equals(Integer.class) || typeClass.equals(Integer.TYPE)) {
return rs.getInt(column);
}
if (typeClass.equals(Long.class) || typeClass.equals(Long.TYPE)) {
return rs.getLong(column);
}
if (typeClass.equals(Boolean.class) || typeClass.equals(Boolean.TYPE)) {
return rs.getBoolean(column);
}
if (typeClass.equals(Float.class) || typeClass.equals(Float.TYPE)) {
return rs.getFloat(column);
}
if (typeClass.equals(Double.class) || typeClass.equals(Double.TYPE)) {
return rs.getDouble(column);
}
if (typeClass.equals(Byte.class) || typeClass.equals(Byte.TYPE)) {
return rs.getByte(column);
}
if (typeClass.equals(String.class)) {
return rs.getString(column);
}
if (Date.class.isAssignableFrom(typeClass)) {
return rs.getTimestamp(column);
}
if (java.sql.Date.class.isAssignableFrom(typeClass)) {
return rs.getDate(column);
}
return rs.getObject(column);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy