use of cn.taketoday.beans.BeanProperty in project today-infrastructure by TAKETODAY.
the class BeanPropertyRowMapper method mapRow.
/**
* Extract the values for all columns in the current row.
* <p>Utilizes public setters and result set meta-data.
*
* @see ResultSetMetaData
*/
@Override
public T mapRow(ResultSet rs, int rowNumber) throws SQLException {
BeanWrapperImpl beanWrapper = this.beanWrapper;
T mappedObject = constructMappedInstance(rs, beanWrapper);
beanWrapper.setBeanInstance(mappedObject);
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
Set<String> populatedProperties = isCheckFullyPopulated() ? new HashSet<>() : null;
HashMap<String, BeanProperty> mappedFields = this.mappedFields;
for (int index = 1; index <= columnCount; index++) {
String column = JdbcUtils.lookupColumnName(rsmd, index);
String field = lowerCaseName(StringUtils.delete(column, " "));
BeanProperty property = mappedFields != null ? mappedFields.get(field) : null;
if (property != null) {
try {
// TODO using TypeHandler
Object value = getColumnValue(rs, index, property);
if (rowNumber == 0 && debugEnabled) {
log.debug("Mapping column '{}' to property '{}' of type '{}'", column, property.getName(), ClassUtils.getQualifiedName(property.getType()));
}
try {
beanWrapper.setPropertyValue(property.getName(), value);
} catch (TypeMismatchException ex) {
if (value == null && this.primitivesDefaultedForNullValue) {
if (debugEnabled) {
log.debug("Intercepted TypeMismatchException for row {} and column '{}'" + " with null value when setting property '{}' of type '{}' on object: {}", rowNumber, column, property.getName(), ClassUtils.getQualifiedName(property.getType()), mappedObject, ex);
}
} else {
throw ex;
}
}
if (populatedProperties != null) {
populatedProperties.add(property.getName());
}
} catch (NotWritablePropertyException ex) {
throw new DataRetrievalFailureException("Unable to map column '" + column + "' to property '" + property.getName() + "'", ex);
}
} else {
// No BeanProperty found
if (rowNumber == 0 && debugEnabled) {
log.debug("No property found for column '{}' mapped to field '{}'", column, field);
}
}
}
if (populatedProperties != null && !populatedProperties.equals(this.mappedProperties)) {
throw new InvalidDataAccessApiUsageException("Given ResultSet does not contain all fields " + "necessary to populate object of " + this.mappedClass + ": " + this.mappedProperties);
}
return mappedObject;
}
use of cn.taketoday.beans.BeanProperty in project today-infrastructure by TAKETODAY.
the class BeanPropertyRowMapper method initialize.
protected void initialize(Class<T> mappedClass, BeanMetadata metadata) {
this.mappedClass = mappedClass;
setConversionService(ApplicationConversionService.getSharedInstance());
HashSet<String> mappedProperties = new HashSet<>();
HashMap<String, BeanProperty> mappedFields = new HashMap<>();
for (BeanProperty property : metadata) {
if (property.isWriteable()) {
String lowerCaseName = lowerCaseName(property.getName());
mappedFields.put(lowerCaseName, property);
String underscoreName = underscoreName(property.getName());
if (!lowerCaseName.equals(underscoreName)) {
mappedFields.put(underscoreName, property);
}
mappedProperties.add(property.getName());
}
}
this.mappedFields = mappedFields;
this.mappedProperties = mappedProperties;
}
use of cn.taketoday.beans.BeanProperty in project today-framework by TAKETODAY.
the class JmxUtilsTests method getAttributeNameWithoutStrictCasing.
@Test
void getAttributeNameWithoutStrictCasing() {
BeanProperty pd = new BeanWrapperImpl(AttributeTestBean.class).getBeanProperty("name");
String attributeName = JmxUtils.getAttributeName(pd, false);
assertThat(attributeName).as("Incorrect casing on attribute name").isEqualTo("name");
}
use of cn.taketoday.beans.BeanProperty in project today-framework by TAKETODAY.
the class Dialect method insert.
public String insert(SQLParams sqlParams) {
StringBuilder sql = new StringBuilder();
sql.append("INSERT INTO ").append(sqlParams.getTableName());
StringBuilder columnNames = new StringBuilder();
StringBuilder placeholder = new StringBuilder();
JdbcBeanMetadata beanMetadata = new JdbcBeanMetadata(sqlParams.getModelClass());
Object model = sqlParams.getModel();
for (BeanProperty property : beanMetadata) {
Object value = property.getValue(model);
if (value != null) {
columnNames.append(",").append(" ").append(property.getName());
placeholder.append(", ?");
}
}
if (columnNames.length() > 0 && placeholder.length() > 0) {
sql.append("(").append(columnNames.substring(2)).append(")");
sql.append(" VALUES (").append(placeholder.substring(2)).append(")");
}
return sql.toString();
}
use of cn.taketoday.beans.BeanProperty in project today-framework by TAKETODAY.
the class Dialect method delete.
public String delete(SQLParams sqlParams) {
StringBuilder sql = new StringBuilder();
sql.append("DELETE FROM ").append(sqlParams.getTableName());
if (sqlParams.getConditionSQL().length() > 0) {
sql.append(" WHERE ").append(sqlParams.getConditionSQL().substring(5));
} else {
if (null != sqlParams.getModel()) {
StringBuilder columnNames = new StringBuilder();
JdbcBeanMetadata beanMetadata = new JdbcBeanMetadata(sqlParams.getModelClass());
for (BeanProperty property : beanMetadata) {
Object value = property.getValue(sqlParams.getModel());
if (value == null) {
continue;
}
columnNames.append(property.getName()).append(" = ? and ");
}
if (columnNames.length() > 0) {
sql.append(" WHERE ").append(columnNames.substring(0, columnNames.length() - 5));
}
}
}
return sql.toString();
}
Aggregations