TIL_Java Spring the Modern Way_9

-·2021년 3월 14일
0

H2

<dependency>
	<groupId>com.h2database</groupId>
	<artifactId>h2</artifactId>
	<scope>runtime</scope>
</dependency>

pom.xml에 추가해주면 내장 데이터베이스를 만들어줌 테스트같은거 할때 아주 유용할듯?

http://localhost:8080/h2-console/

요론식으로 접속해보면 된다.

spring jdbc

그냥 jdbc를 내가 설정하고 사용하려고 하면 엄청나게 귀찮고 복잡함.

이것 역시 spring을 이용하면 아주 편하게 작업가능

그리고 내가 하나하나 하는것보다 실수할 확률도 적어짐.

JdbcTemplate을 이용하여 아주 편하게 DB와 소통가능

PersonJdbcDAO예시

@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()});
	}
}

CommandLineRunner 이용 확인가능

@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());
	}
}
profile
거북이는 오늘도 걷는다

0개의 댓글