기존의 JDBC보다 더욱 발전하고 간결해진 것이 스프링 JDBC이다.
오늘은 Spring JDBC에 대해 알아보겠다.
CustomDTO
DB에 연동을 해야하기 때문에 명령 프롬프트에서 테이블을 만들었다.
만든 테이블의 변수들을 밑에 선언해준 것이다.
public class CustomDTO {
private int id;
private String name;
private int age;
추가로 게터, 세터를 해주었다.
app-context.xml
xml 파일에서 객체 생성을 해주고 의존성 주입을 할 것이다.
<context:component-scan base-package="com.exe.springJdbcTemplate" />
<bean id="customDAO2" class="com.exe.springJdbcTemplate.CustomDAO">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"
p:driverClassName="oracle.jdbc.driver.OracleDriver"
p:url="jdbc:oracle:thin:@localhost:포트번호:xe"
p:username="bbb"
p:password="aa"/>
</beans>
먼저 맨 밑에 dataSource는 DB 위치 정보를 기억하기 위해 입력해주었다.
또한 JdbcTemplate 클래스는 스프링 JDBC의 접근 방법으로 생성자에 dataSource를 넣었다.
com.exe.springJdbcTemplate.CustomDAO2는 jdbcTemplate를 생성자로 참조함으로써
의존성 주입이 dataSource까지 완성되었다.
CustomDAO.java
public class CustomDAO {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
Connection conn = null;
xml파일에서 보았던 프로퍼티를 확인할 수 있다. setJdbcTemplate 메소드에 생성자를 통해 의존성을 주입하였다.
그리고 DB 연결을 하기 위해 먼저 Connection을 가져왔다.
public void insertData(CustomDTO dto) {
StringBuilder sql = new StringBuilder();
sql.append("insert into custom (id,name,age) values (?,?,?)");
jdbcTemplate.update(sql.toString(),dto.getId(),dto.getName(),dto.getAge());
}
public CustomDTO getReadData(int id){
StringBuilder sql = new StringBuilder();
sql.append("select id,name,age from custom where id=?");
CustomDTO dtoOne = jdbcTemplate.queryForObject(sql.toString(), new RowMapper<CustomDTO>() {
public CustomDTO mapRow(ResultSet rs, int rowNum) throws SQLException {
CustomDTO dto = new CustomDTO();
dto.setId(rs.getInt("id"));;
dto.setName(rs.getString("name"));
dto.setAge(rs.getInt("age"));
return dto;
}
},id);
return dtoOne;
}
먼저 inseret 메소드부터 살펴보겠다.
sql문을 입력하기 위해 StringBuilder를 가져와 append로 입력해주었다.
그 다음 생성자를 통해 의존성 주입하였던 jdbcTemplate에서 'update'로 sql문과 각각의 value값을 넣는다.
update의 경우 insert, update, delete로 sql문 실행 시 입력해준다.
toString은 sql문을 String으로 변환해주는 기능이다.
또한 getReadData 메소드는 입력한 데이터 중 하나의 데이터를 가져오는 것이므로
매개변수에 id를 넣었다. 따라서 id를 sql문에서 조건으로 두었다.
하나의 데이터는 queryForObject로 가져온다.
또한 RowMapper는 반복문을 실행하게 하며 그 안에서 mapRow 메소드를 통해 실행한 결과를 rs로 돌린다.
주의할 점은 queryForObject의 괄호 속 마지막에 매개변수인 id를 넣어준다는 것이다.
특성 상 기입 순서가 sql문, RowMapper가 먼저이기 때문이다.
반환 값은 조건에 맞는 데이터 값 하나이다.
CustomMain
콘솔창에서 결과값을 실행할 곳이다.
public class CustomMain {
public static void main(String[] args) {
GenericXmlApplicationContext context = new GenericXmlApplicationContext("app-context.xml");
CustomDAO dao = (CustomDAO2)context.getBean("customDAO");
CustomDTO dto;
Main 파일에서 xml 파일을 읽어내기 위한 코딩을 입력해주며
DB연결을 할 수 있도록 dao를 가져왔다.
//insert
dto = new CustomDTO();
dto.setId(444);
dto.setName("황민현");
dto.setAge(28);
dao.insertData(dto);
System.out.println("insert 완료..");
//OneSelect 하나의 데이터
dto = dao.getReadData(111);
if(dto!=null) {
System.out.printf("%d %s %d\n",dto.getId(),dto.getName(),dto.getAge());
}
System.out.println("OneSelect 완료..");
set을 통해 넣을 값을 입력해주며
insertData는 아까 DAO에서 입력한 메소드를 가져와 DB에 넣게 되는 것이다.
getReadData 메소드는 매개변수가 id이므로
찾을 기준인 id를 입력해주며 콘솔창에 printf의 형식으로 나오도록 하였다.
SQL문을 통해 DB에 입력하여 CMD 창에서 확인한 결과이다!
드라마 사내맞선으로 월요병 치료중이므로 안효섭을 ^ㅠ^..
3월 25일 수업 🌖
'개발 교육 TIL > back-end' 카테고리의 다른 글
[Spring] 스프링 마이바티스 MyBatis (0) | 2022.03.29 |
---|---|
[Spring] AOP(Aspect Oriented Programming : 관점지향프로그래밍) (0) | 2022.03.28 |
[Spring] 의존성 주입 방법 (수동) - Dependency Injection (3) | 2022.03.24 |
[Spring] 게시판 입력/수정창 만들기, annotation 어노테이션 (0) | 2022.03.23 |
[Spring] Annotation 어노테이션 개념, 예제(Controller, RequestMapping) / viewResolver (0) | 2022.03.22 |