package com.nurkiewicz.jdbcrepository.repositories; import com.nurkiewicz.jdbcrepository.JdbcRepository; import com.nurkiewicz.jdbcrepository.RowUnmapper; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Repository; import java.sql.Date; import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedHashMap; import java.util.Map; @Repository public class UserRepository extends JdbcRepository<User, String> { public UserRepository(String tableName) { super(MAPPER, ROW_UNMAPPER, tableName, "user_name"); } public static final RowMapper<User> MAPPER = new RowMapper<User>() { @Override public User mapRow(ResultSet rs, int rowNum) throws SQLException { return new User( rs.getString("user_name"), rs.getDate("date_of_birth"), rs.getInt("reputation"), rs.getBoolean("enabled") ).withPersisted(true); } }; public static final RowUnmapper<User> ROW_UNMAPPER = new RowUnmapper<User>() { @Override public Map<String, Object> mapColumns(User t) { final LinkedHashMap<String, Object> columns = new LinkedHashMap<String, Object>(); columns.put("user_name", t.getUserName()); columns.put("date_of_birth", new Date(t.getDateOfBirth().getTime())); columns.put("reputation", t.getReputation()); columns.put("enabled", t.isEnabled()); return columns; } }; @Override protected <S extends User> S postUpdate(S entity) { entity.withPersisted(true); return entity; } @Override protected <S extends User> S postCreate(S entity, Number generatedId) { entity.withPersisted(true); return entity; } }