From d59b15f1d89c11018c80a64dd3ff21cfc91063e0 Mon Sep 17 00:00:00 2001 From: jdegand <70610011+jdegand@users.noreply.github.com> Date: Sat, 27 May 2023 18:50:27 -0400 Subject: [PATCH] Spring questions added --- README.md | 9 ++++- Spring/MovieRepository.java | 42 +++++++++++++++++++++++ Spring/MultipleDatabases.png | Bin 0 -> 15939 bytes Spring/TaskExecutor.png | Bin 0 -> 23415 bytes Spring/WeatherForecastService.java | 52 +++++++++++++++++++++++++++++ 5 files changed, 102 insertions(+), 1 deletion(-) create mode 100644 Spring/MovieRepository.java create mode 100644 Spring/MultipleDatabases.png create mode 100644 Spring/TaskExecutor.png create mode 100644 Spring/WeatherForecastService.java diff --git a/README.md b/README.md index 72e64b0..3e82e23 100644 --- a/README.md +++ b/README.md @@ -12,4 +12,11 @@ - [W3 Schools](https://www.w3schools.com/sql/sql_null_values.asp) - sql null values - [Digital Ocean](https://www.digitalocean.com/community/tutorials/hibernate-native-sql-query-example) - hibernate native sql query example - [Java Guides](https://www.javaguides.net/2018/11/guide-to-hibernate-native-sql-queries.html) - hibernate native sql queries -- [Baeldung](https://www.baeldung.com/java-dao-pattern) - Java DAO Pattern \ No newline at end of file +- [Baeldung](https://www.baeldung.com/java-dao-pattern) - Java DAO Pattern +- [Rollbar](https://rollbar.com/blog/java-unknownformatconversionexception/) - unknown format conversion exception +- [Spring Docs](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/jdbc/datasource/AbstractDriverBasedDataSource.html#getCatalog()) - AbstractDriverBasedDataSource +- [Stack Overflow](https://stackoverflow.com/questions/71130510/how-do-i-use-jdbc-template-to-query-a-select-where-first-letter-starts-with-sp) - jbdc template query where first letter starts with +- [Stack Overflow](https://stackoverflow.com/questions/8247970/using-like-wildcard-in-prepared-statement) - using like wildcard in prepared statement +- [Mkyong](https://mkyong.com/spring/spring-jdbctemplate-querying-examples/) - jdbctemplate querying examples +- [Spring Docs](https://docs.spring.io/spring-framework/reference/integration/scheduling.html) - scheduling +- [Stack Overflow](https://stackoverflow.com/questions/29832122/create-a-new-instance-of-component-in-spring-boot-framework) - create new instance of component in spring boot \ No newline at end of file diff --git a/Spring/MovieRepository.java b/Spring/MovieRepository.java new file mode 100644 index 0000000..9230f48 --- /dev/null +++ b/Spring/MovieRepository.java @@ -0,0 +1,42 @@ +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.jdbc.core.*; +import org.springframework.stereotype.Repository; +import javax.annotation.PostConstruct; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; +import org.springframework.jdbc.core.BeanPropertyRowMapper; + +class Movie { + public String name; + public int year; + public int rating; + + public Movie(String name, int year, int rating) { + this.name = name; + this.year = year; + this.rating = rating; + } +} + +@Repository +public class MovieRepository { + + @Autowired + private JdbcTemplate template; + + @PostConstruct + public void createTable() { + template.execute("CREATE TABLE movies (id bigint auto_increment primary key, name VARCHAR(50), year int, rating int)"); + } + + public void createMovie(String name, int year, int rating) { + template.update("INSERT INTO movies (id, name, year, rating) VALUES (?,?,?,?)", + null, name, year, rating); + } + + public List findMoviesByName(String nameStartsWith) { + return template.query("SELECT * FROM movies WHERE name LIKE '" + nameStartsWith + "%'", + (rs, rowNum) -> new Movie(rs.getString("name"), rs.getInt("year"), rs.getInt("rating"))); + } +} \ No newline at end of file diff --git a/Spring/MultipleDatabases.png b/Spring/MultipleDatabases.png new file mode 100644 index 0000000000000000000000000000000000000000..103b1c1a57cc760164085c4998ba46147e2e9265 GIT binary patch literal 15939 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 F{Xh4@l+yqJ literal 0 HcmV?d00001 diff --git a/Spring/TaskExecutor.png b/Spring/TaskExecutor.png new file mode 100644 index 0000000000000000000000000000000000000000..88c57271882e4cb825b1bef3698ca97c4176c13c GIT binary patch literal 23415 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 System.out.println(temperature); + } +} + +@Component +@Scope("prototype") // Test Case +class FakeThermometer implements Thermometer { + + private int currentTemperature = 21; + + @Override + public int measure() { return currentTemperature++; } +} + +@Service +public class WeatherForecastService { + + @Autowired + private Thermometer thermometer; + @Autowired + private TemperatureMeasurementCallback callback; + + @Scheduled(fixedRate=50) // Test Case + public void takeTemperatureMeasurement() { + int temperature = thermometer.measure(); + callback.temperatureMeasured(temperature); + } +} \ No newline at end of file