package io.zipcoder.persistenceapp.service; import io.zipcoder.persistenceapp.model.Person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.stereotype.Service; import java.sql.JDBCType; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; /* Service speaks to the repo/jdbc template, controller speaks to service to get stuff */ @Service public class PersonService { private final JDBCType[] types = {JDBCType.VARCHAR, JDBCType.VARCHAR, JDBCType.VARCHAR, JDBCType.DATE, JDBCType.SMALLINT }; @Autowired JdbcTemplate jdbcTemplate; public PersonService() {} class PersonRowMapper implements RowMapper { @Override public Person mapRow(ResultSet rs, int rowNum) throws SQLException { Person person = new Person(); person.setId(rs.getLong("id")); person.setFirstName(rs.getString("first_name")); person.setLastName(rs.getString("last_name")); person.setMobile(rs.getString("mobile")); person.setBirthday(rs.getDate("birthday")); person.setHomeId(rs.getInt("home_id")); return person; } } public void add(Person p) { Object[] info = {p.getFirstName(), p.getLastName(), p.getMobile(), p.getBirthday(), p.getHomeId()}; jdbcTemplate.update( "INSERT INTO person (first_name, last_name, mobile, birthday, home_ID)" + "VALUES (?, ?, ?, ?, ?)", info, types); } public void update(Person p) { Object[] info = {p.getFirstName(), p.getLastName(), p.getMobile(), p.getBirthday(), p.getHomeId()}; jdbcTemplate.update( "UPDATE person set first_name = ?, last_name ?, mobile = ?, birthday = ?, home_ID = ?" + "VALUES (?, ?, ?, ?, ?)", info, types); } public void remove(Long id) { jdbcTemplate.update("DELETE FROM person WHERE id = ?", id); } public void removePeople(Iterable p) { p.forEach(person -> remove(person.getId())); } public Person findPersonById(Integer id) { return jdbcTemplate.queryForObject("SELECT * FROM PERSON WHERE ID=?", new Object[] {id}, new BeanPropertyRowMapper<>(Person.class)); } public List getAllPeople() { return jdbcTemplate.query("SELECT * FROM PERSON", new PersonRowMapper()); } public List findPeopleByMobile(String mobile) { return jdbcTemplate.query("SELECT * FROM PERSON WHERE MOBILE=?", new Object[] {mobile}, new PersonRowMapper()); } public List findPeopleByLastName(String lastName) { return jdbcTemplate.query("SELECT * FROM PERSON WHERE LAST_NAME=?", new Object[] {lastName}, new PersonRowMapper()); } public List generateSurnameMap(String lastName) { return jdbcTemplate.query("SELECT * FROM PERSON WHERE LAST_NAME=?", new Object[] {lastName}, new PersonRowMapper()); } }