Skip to content

Commit 740a86e

Browse files
committed
6_04_HW5_optional_fix_jdbc_profiles
1 parent c8cb2f3 commit 740a86e

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed

src/main/java/ru/javawebinar/topjava/repository/jdbc/JdbcMealRepository.java

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package ru.javawebinar.topjava.repository.jdbc;
22

3-
import org.springframework.beans.factory.annotation.Autowired;
3+
import org.springframework.context.annotation.Profile;
44
import org.springframework.dao.support.DataAccessUtils;
55
import org.springframework.jdbc.core.BeanPropertyRowMapper;
66
import org.springframework.jdbc.core.JdbcTemplate;
@@ -9,14 +9,15 @@
99
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
1010
import org.springframework.jdbc.core.simple.SimpleJdbcInsert;
1111
import org.springframework.stereotype.Repository;
12+
import ru.javawebinar.topjava.Profiles;
1213
import ru.javawebinar.topjava.model.Meal;
1314
import ru.javawebinar.topjava.repository.MealRepository;
1415

16+
import java.sql.Timestamp;
1517
import java.time.LocalDateTime;
1618
import java.util.List;
1719

18-
@Repository
19-
public class JdbcMealRepository implements MealRepository {
20+
public abstract class JdbcMealRepository<T> implements MealRepository {
2021

2122
private static final RowMapper<Meal> ROW_MAPPER = BeanPropertyRowMapper.newInstance(Meal.class);
2223

@@ -26,8 +27,7 @@ public class JdbcMealRepository implements MealRepository {
2627

2728
private final SimpleJdbcInsert insertMeal;
2829

29-
@Autowired
30-
public JdbcMealRepository(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
30+
JdbcMealRepository(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
3131
this.insertMeal = new SimpleJdbcInsert(jdbcTemplate)
3232
.withTableName("meal")
3333
.usingGeneratedKeyColumns("id");
@@ -36,13 +36,41 @@ public JdbcMealRepository(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate
3636
this.namedParameterJdbcTemplate = namedParameterJdbcTemplate;
3737
}
3838

39+
protected abstract T toDbDateTime(LocalDateTime ldt);
40+
41+
@Repository
42+
@Profile(Profiles.POSTGRES_DB)
43+
public static class Java8JdbcMealRepository extends JdbcMealRepository<LocalDateTime> {
44+
public Java8JdbcMealRepository(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
45+
super(jdbcTemplate, namedParameterJdbcTemplate);
46+
}
47+
48+
@Override
49+
protected LocalDateTime toDbDateTime(LocalDateTime ldt) {
50+
return ldt;
51+
}
52+
}
53+
54+
@Repository
55+
@Profile(Profiles.HSQL_DB)
56+
public static class TimestampJdbcMealRepository extends JdbcMealRepository<Timestamp> {
57+
public TimestampJdbcMealRepository(JdbcTemplate jdbcTemplate, NamedParameterJdbcTemplate namedParameterJdbcTemplate) {
58+
super(jdbcTemplate, namedParameterJdbcTemplate);
59+
}
60+
61+
@Override
62+
protected Timestamp toDbDateTime(LocalDateTime ldt) {
63+
return Timestamp.valueOf(ldt);
64+
}
65+
}
66+
3967
@Override
4068
public Meal save(Meal meal, int userId) {
4169
MapSqlParameterSource map = new MapSqlParameterSource()
4270
.addValue("id", meal.getId())
4371
.addValue("description", meal.getDescription())
4472
.addValue("calories", meal.getCalories())
45-
.addValue("date_time", meal.getDateTime())
73+
.addValue("date_time", toDbDateTime(meal.getDateTime()))
4674
.addValue("user_id", userId);
4775

4876
if (meal.isNew()) {
@@ -81,6 +109,6 @@ public List<Meal> getAll(int userId) {
81109
public List<Meal> getBetweenHalfOpen(LocalDateTime startDateTime, LocalDateTime endDateTime, int userId) {
82110
return jdbcTemplate.query(
83111
"SELECT * FROM meal WHERE user_id=? AND date_time >= ? AND date_time < ? ORDER BY date_time DESC",
84-
ROW_MAPPER, userId, startDateTime, endDateTime);
112+
ROW_MAPPER, userId, toDbDateTime(startDateTime), toDbDateTime(endDateTime));
85113
}
86114
}

src/main/java/ru/javawebinar/topjava/web/MealServlet.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package ru.javawebinar.topjava.web;
22

3-
import org.springframework.context.ConfigurableApplicationContext;
43
import org.springframework.context.support.ClassPathXmlApplicationContext;
54
import org.springframework.util.StringUtils;
5+
import ru.javawebinar.topjava.Profiles;
66
import ru.javawebinar.topjava.model.Meal;
77
import ru.javawebinar.topjava.web.meal.MealRestController;
88

@@ -22,12 +22,15 @@
2222

2323
public class MealServlet extends HttpServlet {
2424

25-
private ConfigurableApplicationContext springContext;
25+
private ClassPathXmlApplicationContext springContext;
2626
private MealRestController mealController;
2727

2828
@Override
2929
public void init() {
30-
springContext = new ClassPathXmlApplicationContext("spring/spring-app.xml", "spring/spring-db.xml");
30+
springContext = new ClassPathXmlApplicationContext(new String[]{"spring/spring-app.xml", "spring/spring-db.xml"}, false);
31+
// springContext.setConfigLocations("spring/spring-app.xml", "spring/spring-db.xml");
32+
springContext.getEnvironment().setActiveProfiles(Profiles.getActiveDbProfile(), Profiles.REPOSITORY_IMPLEMENTATION);
33+
springContext.refresh();
3134
mealController = springContext.getBean(MealRestController.class);
3235
}
3336

0 commit comments

Comments
 (0)