Spring JDBC와 DTO, DAO (4)

Minkyeong Kim·2021년 11월 25일
0

[boostcourse] Web-Backend

목록 보기
34/55

DTO, DAO로 데이터 가져오기

1) dto 패키지를 생성해 Role 클래스 생성

Role.java

package kr.or.connect.daoexam.dto;

public class Role {
	private int roleId;
	private String description;
	
	public int getRoleId() {
		return roleId;
	}


	public void setRoleId(int roleId) {
		this.roleId = roleId;
	}


	public String getDescription() {
		return description;
	}


	public void setDescription(String description) {
		this.description = description;
	}


	@Override //toString 메소드를 오버라이딩 하여 객체의 값들을 한번에 보여줄 수 있도록 함
	public String toString() {
		return "Role [roleId=" + roleId + ", description=" + description + "]";
	}	
}
  • 주의할 점: mysql에서 role_id라는 column명으로 가져와짐 -> NameparameterJdbc는 이를 roleId라는 자바형식으로 변환된 변수에 저장하게 되므로, roleID나 roleid와 같은 이름으로 설정하면 에러남

2) dao 패키지 내에 RoleDaoSqls, RoleDao 클래스 생성

RoleDaoSqls.java

package kr.or.connect.daoexam.dao;

public class RoleDaoSqls {
	public static final String SELECT_ALL="SELECT role_id, description FROM role order by role_id";
}
  • SQL문을 SELECT_ALL에 저장

RoleDao.java

package kr.or.connect.daoexam.dao;

import java.util.Collections;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;

import kr.or.connect.daoexam.dto.Role;

import static kr.or.connect.daoexam.dao.RoleDaoSqls.*;
@Repository //DAO에는 저장소의 역할을 한다는 의미로 Repository 어노테이션을 붙임
public class RoleDao {
	private NamedParameterJdbcTemplate jdbc; 
	// 이름을 이용해 바인딩, 결과값 가져올 수 있음
	// role_id, roleId와 같이 규칙이 다른 이름을 자동으로 매핑

	private RowMapper<Role> rowMapper = BeanPropertyRowMapper.newInstance(Role.class);
	
	public RoleDao(DataSource dataSource) {
		this.jdbc = new NamedParameterJdbcTemplate(dataSource);
	}
	
	public List<Role> selectAll(){
		// RoleDaoSqls에서 가져온 SELECT_ALL 쿼리문을 실행시켜 rowMapper에 저장하게 됨
		return jdbc.query(SELECT_ALL, Collections.emptyMap(), rowMapper);
	}
}
  • static으로 RoleDaoSqls의 모든 메소드를 import함 -> SELECT_ALL 쿼리문도 가져와짐
  • 주의할 점: Role 클래스를 import할 때 혼동하지 말 것

3) ApplicationConfig.java 에 ComponentScan 어노테이션 추가

ApplicationConfig.java

@ComponentScan(basePackages= {"kr.or.connect.daoexam.dao"})
  • 어노테이션이 붙은 객체를 찾아 Bean으로 등록하기 위해 basePackages 지정한 ComponentScan 어노테이션을 추가

4) main 패키지에 SelectAllTest 클래스 생성

package kr.or.connect.daoexam.main;

import java.util.List;


import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import kr.or.connect.daoexam.config.ApplicationConfig;
import kr.or.connect.daoexam.dao.RoleDao;
import kr.or.connect.daoexam.dto.Role;

public class SelectAllTest {
	public static void main(String[] args) {
		ApplicationContext ac = new AnnotationConfigApplicationContext(ApplicationConfig.class);
		
		RoleDao roleDao = ac.getBean(RoleDao.class);
		
		List<Role> list = roleDao.selectAll();
		
		for(Role role: list) {
			System.out.println(role);
		}
	}
}
  • 컨테이너로부터 roleDao 빈을 가져와 selectAll 함수 실행
    -> 얻은 결과값을 출력함

0개의 댓글