Skip to content

Commit

Permalink
feat: EntityLoader 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
ghojeong committed Jul 8, 2023
1 parent f3fdc20 commit 292be97
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 45 deletions.
43 changes: 0 additions & 43 deletions src/main/java/jdbc/RowMapperImpl.java

This file was deleted.

49 changes: 49 additions & 0 deletions src/main/java/persistence/entity/EntityLoader.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package persistence.entity;

import jdbc.RowMapper;
import jdbc.exception.RowMapException;
import persistence.sql.util.ColumnFields;
import persistence.sql.util.ColumnName;

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.Map;
import java.util.stream.Collectors;

public class EntityLoader<T> implements RowMapper<T> {
private final Class<T> clazz;
private final Map<String, Field> fieldsByName;

public EntityLoader(Class<T> clazz) {
this.clazz = clazz;
this.fieldsByName = ColumnFields.forQuery(clazz)
.stream().collect(Collectors.toMap(
ColumnName::build,
field -> {
field.setAccessible(true);
return field;
}
));
}

@Override
public T mapRow(ResultSet resultSet) {
try {
final T object = clazz.getDeclaredConstructor().newInstance();
final ResultSetMetaData metaData = resultSet.getMetaData();
final int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
fieldsByName.get(
metaData.getColumnLabel(i)
).set(
object,
resultSet.getObject(metaData.getColumnName(i))
);
}
return object;
} catch (Exception e) {
throw new RowMapException(e);
}
}
}
3 changes: 1 addition & 2 deletions src/main/java/persistence/entity/EntityManagerImpl.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package persistence.entity;

import jdbc.JdbcTemplate;
import jdbc.RowMapperImpl;
import persistence.sql.dml.DmlBuilder;

import java.util.List;
Expand Down Expand Up @@ -80,7 +79,7 @@ private <T> Optional<T> findFromDB(EntityKey<T> key) {
Class<T> clazz = key.getEntityClass();
List<T> entities = jdbcTemplate.query(
dml.getFindByIdQuery(clazz, key.getEntityId()),
new RowMapperImpl<>(clazz)
new EntityLoader<>(clazz)
);
if (entities.isEmpty()) {
return Optional.empty();
Expand Down

0 comments on commit 292be97

Please sign in to comment.