<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
pom.xml에 추가해주면 내장 데이터베이스를 만들어줌 테스트같은거 할때 아주 유용할듯?
http://localhost:8080/h2-console/
요론식으로 접속해보면 된다.
그냥 jdbc를 내가 설정하고 사용하려고 하면 엄청나게 귀찮고 복잡함.
이것 역시 spring을 이용하면 아주 편하게 작업가능
그리고 내가 하나하나 하는것보다 실수할 확률도 적어짐.
JdbcTemplate을 이용하여 아주 편하게 DB와 소통가능
@Repository
public class PersonJdbcDAO {
@Autowired
JdbcTemplate jdbcTemplate;
// customRowMapper를 만들어서 사용할수도있음
// 열이름이 필드이름과 일치하지 않거나 하는 경우
class PersonRowMapper implements RowMapper<Person>{
// rowNum은 잘안씀
@Override
public Person mapRow(ResultSet rs, int rowNum) throws SQLException {
Person person = new Person();
person.setId(rs.getInt("id"));
person.setName(rs.getString("name"));
person.setLocation(rs.getString("location"));
person.setBirthDate(rs.getTimestamp("birth_date"));
return person;
}
}
public List<Person> findAll(){
// sql문, 결과를 매핑할 VO
return jdbcTemplate.query("select * from person", new PersonRowMapper());
}
@SuppressWarnings("deprecation")
public Person findById(int id){
// sql문, sql문에 매핑할 인자값 ,결과를 매핑할 VO
return jdbcTemplate.queryForObject("select * from person where id = ?", new Object[] {id},
new BeanPropertyRowMapper<Person>(Person.class));
}
public Integer deleteById(int id){
// sql문, sql문에 매핑할 인자값
// return 성공한 행의 수, 여기서는 1건이겟죠? 그러니까 1을 반환
return jdbcTemplate.update("delete from person where id = ?", new Object[] {id});
}
public Integer insert(Person person){
return jdbcTemplate.update("insert into person (id, name, location, birth_date) "
+ "values(?, ?, ?, ?);",
new Object[] {person.getId(), person.getName(), person.getLocation(),
new Timestamp(person.getBirthDate().getTime())});
}
public Integer update(Person person){
return jdbcTemplate.update("update person "
+ "set name = ?, location = ?, birth_date = ?"
+ "where id = ?",
new Object[] {person.getName(), person.getLocation(),
new Timestamp(person.getBirthDate().getTime()),
person.getId()});
}
}
@SpringBootApplication
public class DatabaseDemoApplication implements CommandLineRunner{
private Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
PersonJdbcDAO dao;
public static void main(String[] args) {
SpringApplication.run(DatabaseDemoApplication.class, args);
}
// 체크해보기
@Override
public void run(String... args) throws Exception {
logger.info("All users: {}", dao.findAll());
logger.info("User id: {}", dao.findById(10001));
logger.info("Deleting 10002: Number of Rows deleted - {}", dao.deleteById(10002));
logger.info("Inserting 10004: {}", dao.insert(new Person(10004, "Tara", "Berlin", new Date())));
logger.info("Update 10003: {}", dao.update(new Person(10003, "Pieter", "Utrecht", new Date())));
logger.info("All users: {}", dao.findAll());
}
}