개발자는 복사 붙여넣기 되는 코드를 줄여 성능을 개선 시켜야한다.
이때 Model DAO 고도화를 진행한다. (로직, 성능 개선, 최적화)
복잡한 로직을 캡슐화 및 성능을 개선하기 위해 템플릿 패턴을 사용한다.
이때 스프링 프레임워크에서 제공하는 JdbcTemplate 을 사용해서 단순화 최적화가 가능하다.
JdbcTemplate applicationContext.xml(설정파일)
더보기
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
<property name="dataSource" ref="ds"/>
</bean>
pom.xml 의존 주입
더보기
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>3.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
DAO JdbcTemplate 사용
더보기
@Autowired
private JdbcTemplate jdbcTemplate;
public static String keyword_map(String keyword) {
Map<String, String> map = new HashMap<String, String>();
map.put("NAME", " WHERE MEMBER_NAME = ?");
map.put("TITLE", " WHERE BOARD_TITLE LIKE CONCAT('%',?,'%')");
map.put("CONTENT", " WHERE BOARD_CONTENT LIKE CONCAT('%',?,'%')");
return map.get(keyword) + " ORDER BY BOARD_NUM DESC";
}
public List<BoardDTO> selectAll(BoardDTO boardDTO) {
Object[] args = {boardDTO.getBoard_search_value()};
String result = SQL_ALL;
if(boardDTO.getBoard_condition().equals("SQL_ALL_SEARCH")){
System.out.println("boardDTO.getBoard_condition().equals(\"SQL_ALL_SEARCH\")){ 실행");
result = SQL_ALL_SEARCH + keyword_map(boardDTO.getBoard_search_key());
return jdbcTemplate.query(result, args, new BoardRowMapper());
}
System.out.println("SQL : ["+result+"]");
return jdbcTemplate.query(result, new BoardRowMapper());
}
public BoardDTO selectOne(BoardDTO boardDTO) {
Object[] args = {boardDTO.getBoard_num()};
return jdbcTemplate.queryForObject(SQL_ONE, args, new BoardRowOneMapper());
}
public boolean insert(BoardDTO boardDTO) {
int result = jdbcTemplate.update(SQL_INSERT, boardDTO.getBoard_title(), boardDTO.getBoard_content(), boardDTO.getBoard_writer_id());
return result > 0;
}
public boolean update(BoardDTO boardDTO) {
return false;
}
public boolean delete(BoardDTO boardDTO) {
return false;
}
트랜잭션
트랜잭션은 데이터 무결성 + 프로그램의 신뢰성을 추가하는 기능이다.
트랜잭션도 JdbcTemplate 과 동일하게 스프링에서 제공해준다.
트랜잭션 applicationContext.xml(설정파일)
더보기
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="txManager">
<property name="dataSource" ref="ds"/>
</bean>
<tx:advice transaction-manager="txManager" id="txAdvice">
<tx:attributes>
<tx:method name="select*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* com.nsd.app.biz..*Impl.*(..))" id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
xml 설정 설명
DataSourceTransactionManager
더보기
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="txManager">
<property name="dataSource" ref="ds"/>
</bean>
스프링 데이터 트랜잭션을 관리한다.
BataSourceTransactionManager 를 이용해서 데이터와 트랜잭션을 관리한다.
tx:advice
더보기
<tx:advice transaction-manager="txManager" id="txAdvice">
<tx:attributes>
<tx:method name="select*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
트랜잭션 어드바이스는 특정 메서드가 실행될 때 트랜잭션이 적용하도록 한다.
-> 이 xml 코드에서의 2가지 설정으로는 모든 select 에 대해서는 읽어 오기만 하는 설정
다른 메서드들에 대해서는 트랜잭션을 사용한다.
aop:config
더보기
<aop:config>
<aop:pointcut expression="execution(* com.nsd.app.biz..*Impl.*(..))" id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
AOP 설정을 통해 트랜잭션 어드바이스를 특정 포인트컷을 적용한다.
이때 패키지내 Impl 가 들어간 모든 메서드에 트랜잭션 어드바이스를 적용해줍니다.
전체 xml 코드
더보기
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="txManager">
<property name="dataSource" ref="ds"/>
</bean>
<tx:advice transaction-manager="txManager" id="txAdvice">
<tx:attributes>
<tx:method name="select*" read-only="true"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(* com.nsd.app.biz..*Impl.*(..))" id="txPointcut"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>
</aop:config>
728x90
'국비 내용 정리 > Spring' 카테고리의 다른 글
[Spring] 국비 79일 내용 정리 (Mybatis) (2) | 2024.11.04 |
---|---|
국비 69일 내용 정리 (MultipartFile) (0) | 2024.10.22 |
국비 67일 내용정리 (AOP @어노테이션) (0) | 2024.10.16 |
국비 66일 내용정리 (AOP) (1) | 2024.10.15 |
국비 65일 내용정리 (Spring 비동기) (0) | 2024.10.14 |