Ten eerste raad ik je aan om te leren hoe je dit kunt doen zonder application.properties
het dossier. We leven in de 21e eeuw, waar Spring-boot
stelt ons in staat om jdbc dataSource
. te declareren als @Bean
met databasegegevens in MySpringBootApplication
klas. Bekijk hier
hoe u dit doet
Ten tweede raad ik aan om jdbcTemplate
. niet te gebruiken tenzij je geen tijd hebt. Let op mijn woorden, als debuggen gebeurt, zou het een nachtmerrie zijn. Dus probeer pure Jdbc te gebruiken met toevoeging van veerconfiguratie.
Voorbeeld voorbeeld hoe het te doen:
StudentDAO-interface
public interface StundentDAO {
void addStudent(String name, String surname);
List<Student> findStudents();
}
JdbcStudentDAO-implementatie
@Repository
public class JdbcStudentDAO implements StudentDAO {
//[IMPORTANT] import javax.sql.datasource package (?)
private Datasource datasource;
@Autowire
public JdbcStudentDAO(Datasource datasource) {
this.datasource = datasource;
}
@Override
public void addStudent(String name, String surname) {
String query = "INSERT INTO Students VALUES (?,?)";
try(Connection connection = datasource.getConnection()) {
try(PreparedStatement statement = connection.preparedStatement(query)) {
statement.setString(1, name);
statement.setString(2, surname);
statement.executeUpdate();
}
} catch(SQLException e) {
e.printStacktrace();
}
}
@Override
public List<Student> findStudents() {
String query = "SELECT * FROM Students";
Student student = null; //will be used soon as DTO
List<Student> listOfStudents = null;
try(Connection connection = datasource.getConnection()) {
try(PreparedStatement statement = connection.preparedStatement(query)) {
try(ResultSet rs = statement.executeQuery()) {
listOfStudents = new ArrayList<>();
while(rs.next()) {
student = new Student(
rs.getString("name");
rs.getString("surname");
);
}
listOfStudents.add(student);
}
}
} catch(SQLException e) {
e.printStacktrace();
}
return listOfStudents;
}
}
Houd er rekening mee dat dataSource
doet alleen Database-connectiviteit. (zie de link)
Veel succes!