Lesson4DatabaseRepo.java
package no.ntnu.idatt2105.l4.demo.repo;
import no.ntnu.idatt2105.l4.demo.model.Meme;
import no.ntnu.idatt2105.l4.demo.web.Lesson4Controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Profile("!nodb") // Use for any profile that isn't "nodb"
@Repository
public class Lesson4DatabaseRepo implements Lesson4Repo {
Logger logger = LoggerFactory.getLogger(Lesson4Repo.class);
@Autowired
private JdbcTemplate jdbcTemplate;
public Meme saySomething() {
// Databasen inneholder én tabell (info), som har én kolonne (infostring), som har én rad (string som beskriver hvordan base (dev eller test) det er).
// Se også i application-MILJØNAVN.properties for hvordan man angir credentials for å koble seg til DB.
// I den sammenhengen, vær spesielt oppmerksom på 'spring.datasource.url', som angir connection-string for å koble til databasen.
// Det som er litt spesielt med 'spring.datasource.url' er at den også angir hvilken type database man går mot, slik at Spring Boot
// kan velge riktig driver. I dette eksempelet er PostgreSQL brukt, men om man f.eks. skal bruke MySQL vil denne stringen ha et annet format.
// Søk på nett for rett format på connection-string for databasen du tenker å bruke.
String result = jdbcTemplate.queryForList("SELECT infostring FROM info", String.class).get(0);
// queryForList() er én av en del forskjellige metoder man kan bruke for å spørre mot databasen.
// En annen kan være queryForObject(), men denne krever en såkalt RowMapper, som er en klasse som
// implementerer interfacet RowMapper. Dette interfacet har én metode, mapRow(), som utfører mapping
// for hver rad (dvs. metoden blir kjørt én gang for hver rad i result-settet) til Java-objekter.
// Se https://github.com/eugenp/tutorials/blob/master/persistence-modules/spring-jdbc/src/main/java/com/baeldung/spring/jdbc/template/guide/EmployeeRowMapper.java
// for eksempel.
// For å inserte kan en bruke execeute(). Se https://github.com/eugenp/tutorials/blob/master/persistence-modules/spring-jdbc/src/main/java/com/baeldung/spring/jdbc/template/guide/EmployeeDAO.java
// men legg merke til at dette eksempelet benytter mer enn bare JdbcTemplate (SimpleJdbcInsert, SimpleJdbcCall, f.eks.), som er noe vi ikke
// bryr oss om. Du står dog fritt til å bruke om du vil.
return new Meme("Meme hentet fra base", result);
}
public void create(Meme meme) {
if (meme.getMemeText().isEmpty() || meme.getPic().isEmpty()) throw new IllegalArgumentException("Must provide non-empty text for both text and pic");
logger.debug("Creating new meme...");
}
}