-개발환경-
IDE : Eclipse 2018-12 (4.10.0) Spring Tool Suite : 3.9.7.RELEASE WAS : Pivotal tc Server Developer Edition v4.0 (피보탈 톰캣 서버) DB : Oracle 11g |
-설정-
-STS 브라우저 테스트환경 설정해주기-
WINDOW => Web Browser => Chrome 선택해서 테스트 환경을 크롬으로 잡아주기
-한글깨짐방지 태그 추가해주기-
web.xml 파일에서 아래 태그들 추가.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
|
cs |
DBCP Template을 위해 pom.xml 에서 다음을 설정해준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<!-- 오라클 드라이버 외부 저장소 설정 -->
<repositories>
<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
<!-- oracle -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>12.1.0.1</version>
</dependency>
<!-- spring dbcp -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
|
cs |
DBCP Template을 위해 servlet-context.xml 에서 다음을 설정해준다.
1
2
3
4
5
6
7
8
9
10
11
|
<!--servlet-context.xml에 dbcp template을 사용하기 위한 bean을 추가한다.-->
<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<beans:property name="username" value="koreait"/>
<beans:property name="password" value="0000"/>
</beans:bean>
<beans:bean name="template" class="org.springframework.jdbc.core.JdbcTemplate">
<beans:property name="dataSource" ref="dataSource"/>
</beans:bean>
|
cs |
-HomeController.java-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
@Controller
public class HomeController {
private JdbcTemplate template;
public JdbcTemplate getTemplate() {
return template;
}
@Autowired
public void setTemplate(JdbcTemplate template) {
this.template = template;
Constant.template = template;
}
~~~
|
cs |
사전에 , servlet-context.xml 파일에서 JdbcTemplate 타입의 bean을 생성한다.
프로젝트가 시작될 때 JdbcTemplate 클래스의 bean을 JdbcTemplate 타입 변수에 넣어주도록 만든다.
9 : JdbcTemplate 클래스 객체의 setter 메소드가 프로젝트가 시작될때 자동으로 실행되게 하기 위해서 @Autowired 어노테이션을 붙여준다.
@Autowired 어노테이션이 붙어있는 메소드의 인수로 스프링이 servlet-context.xml 파일에서 생성한 JdbcTemplate 클래스의 bean을 자동으로 넣어준다.
12 : 컨트롤러 이외의 클래스에서 JdbcTemplate을 사용할수 있게 하기 위해서
적당한 이름의 패키지에 적당한 이름으로 클래스를 만들고 선언한 정적 변수에 servlet-context.xml 파일에서 생성된 JdbcTemplate 클래스의 bean을 넣어준다.
-Constant.java-
1
2
3
4
5
|
public class Constant {
//다른 클래스에서 접근해서 사용해야 하기때문에 ,public static 으로 선언
public static JdbcTemplate template;
}
|
cs |
-MvcboardDAO.java-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class MvcboardDAO {
private JdbcTemplate template;
public MvcboardDAO() {
template = Constant.template;
}
public void insert(final MvcboardVO mvcboardVO) {
String sql = "insert into mvcboard (idx,name,subject,content, ref , lev , seq) "
+ "values (mvcboard_idx_seq.nextval,?,?,?,mvcboard_idx_seq.currval,0,0)";
template.update(sql,new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setString(1, mvcboardVO.getName());
ps.setString(2, mvcboardVO.getSubject());
ps.setString(3, mvcboardVO.getContent());
}
});
}
|
cs |
3 : DAO 클래스에서 jdbc template 을 사용하기 위해서 JdbcTemplate 클래스 타입의 객체변수를 생성한다.
5~7 : 생성자에서 template을 초기화한다.
9 : 테이블내용이 변경되는 SQL 명령을 수행하려할때,
메소드의 인수로 넘어오는 데이터는 중간에 값이 변경되면 안되기 때문에 fianl로 지정하도록 되어있다.
13 : 메소드의 인자로 ? 를 채울 익명객체가 들어간다.
15 : 오버라이드된 setValues메소드 에서 ? 를 채운다.
template.update(sql); => executeUpdate(sql)와 같은기능
template.query(~);//테이블의 내용이 갱신되지 않는 sql 명령을 실행한다. => 실행결과가 여러건 일 경우 사용한다.
template.queryForObject(~);//테이블의 내용이 갱신되지 않는 sql 명령을 실행한다. =>실행결과가 1건일 경우.
template.queryForList(~);//테이블의 내용이 갱신되지 않는 sql 명령을 실행한다. => 여러개 꺼내옴
template.queryForInt(~);// ( 비추천)테이블의 내용이 갱신되지 않는 sql 명령을 실행한다. => 실행 결과가 정수 1건일 경우 사용한다.
다른 sql 문을 이용하는 경우를 보자..
1
2
|
String sql = "select count(*) from mvcboard";
return template.queryForObject(sql, Integer.class);
|
cs |
1
2
3
4
5
6
|
String sql = "select * from ("+
"select rownum rnum, AA.* from ("+
"select * from mvcboard order by ref desc,seq asc"+
") AA where rownum <="+ hmap.get("endNo")+
") where rnum >="+hmap.get("startNo");
return (ArrayList<MvcboardVO>) template.query(sql, new BeanPropertyRowMapper(MvcboardVO.class));
|
cs |
1~5 : dbcp template 을 사용하는 경우 select sql 명령에만 "?" 를 사용할 수 없다. => "?" 자리에 데이터가 저장된 변수를 사용한다.
8 : select sql 명령 실행 결과를 BeanPropertyRowMapper 클래스 생성자의 인수로
MvcboardVO 클래스를 넘겨서 sql 명령 실행 결과를
저장시켜 리턴한다 .
=> List 타입으로 결과가 리턴되기 때문에 메소드의 리턴타입으로 형변환이 필요하다.
테이블의 필드 이름과 MvcboardVO클래스의 멤버 변수 이름이 반드시 같아야 정상적으로 실행된다.
-구성도-
-요약-
-마침글-
인용
'21년이전 > SPRING' 카테고리의 다른 글
SPRING - 자주사용되는 데이터 전달객체들 + 어노테이션+Lombok (0) | 2021.05.18 |
---|---|
SPRING - (MVC) MyBatis 로 게시판 구현 (0) | 2021.05.06 |
SPRING - (MVC) DBCP 게시글 예제 (0) | 2021.05.01 |
SPRING - (MVC) 컨트롤러-뷰 의 데이터 흐름 (0) | 2021.04.29 |
SPRING - (MVC) 다양한 컨트롤러와 servlet-context.xml 에 대한 학습 (0) | 2021.04.29 |