예제 순서
- spring_web_jdbc_transaction
- spring_web_jdbc2_transaction
- spring_board
오늘 공부 한 것
- TCL : Transaction Control Language
ㅇ 트랜잭션을 어떻게 관리 할 것이냐? 잘 되었으면 commit 실패하면 RollBack
ㅇ DML을 여러가지 복합적 쓰게 되는데 연차적으로 이어지는 흐름이 모두 진행되어야 한다.
ㅁ 연속적으로 실행하게 될 DML의 논리적 모음
- JAVA 상에서도 트랜잭션 처리가 가능함.
ㅇ conn.setAutoCommit(false) 자동으로 commit하는 것을 방지
ㅇ conn.commit(); 예외처리 => 예외발생 할 경우 RollBack 처리
- jdbcTemplate 트랜잭션 처리
<!-- 트랜잭션 처리 : DataSourceTransactionManager -->
<beans:bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<beans:property name="dataSource" ref="dataSource"></beans:property>
</beans:bean>
- dept_log 테이블을 만들어 방명록 작성시 log를 남김
ㅇ 데이터가 입력되면서 로그도 남기는데 로그테이블은 1회만 현재 입력되고 오류
ㅁ 프라이머리키 오류
ㅇ 예외처리하면 데이터는 입력되는데 로그는 증가되지 않음 => 일부는 실행되고 일부는 실행됨
ㅁ 트랜잭션 망가진것을 확인 할 수 있음 => 하나가 안 되면 모두 안 되게 트랜잭션처리가 필요함
ㅇ PlatformTransactionManager 트랜잭션 구현 할 것
ㅇ DataSourceTransactionManager 구현 객체를 자동 주입
- 게시판 생성
ㅇ pom 수정
ㅇ web.xml 인코딩 필터 추가
ㅇ properties 설정
ㅇ maven updateproject
ㅇ 이클립스 확장자에 따른 encoding 상태 UTF-8 확인
ㅇ boarddto 패키지 및 클래스 생성
ㅁ rombok을 사용하여 생성
ㅇ controller 패키지 생성 및 메인 컨트롤러 생성
ㅁ home 페이지에서 a태그로 컨트로럴로 url을 전달
ㅁ list url 전달받을 list 페이지로 이동
ㅁ list 페이지에서 컨트롤러를 거쳐 담은 데이터를 출력
ㅇ service 패키지 및 클래스 생성
ㅁ 서비스 인터페이스 구현
ㅁ 서비스 구현객체 구현 => @Service 설정
ㅁ 메인컨트롤러 boardservice 인터페이스 선언 후 의존 주입
~ @setter를 통해 자동 주입
~ logger.info를 통해 상태정보 확인
ㅇ dao 패키지 및 클래스 생성
ㅁ dao 인터페이스 구현
ㅁ dao 구현 객체 구현 => @Repository 설정 => 오버라이드 메서드 구현
ㅁ boardserviceimple doa 인터페이스 @setter 사용하여 자동 의존 주입
~ logger.info
ㅁ 메인컨트롤러에서 dao의 참조값 확인
ㅇ mybatis를 사용 할 것
ㅁ dao 구현객체에 sqlsession 선언 @을 사용하여 의존 자동 주입
ㅁ xml에 db 접속 정보와 sqlsession 팩토리 및 탬플레이트 구현
<!-- dataSource 객체 -->
<bean id="dataSource" class="org.apache.tomcat.jdbc.pool.DataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.0.35:1521:orcl" />
<property name="name" value="scott" />
<property name="password" value="tiger" />
</bean>
<!-- sqlSessionFactory -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="MYBATIS 설정파일 경로" />
<property name="mapperLocations" value="mapper 파일경로" />
</bean>
<!-- sqlsession을 쉽게 사용하기 위한 템플릿 -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="factory"></constructor-arg>
</bean>
- mybatis 설정 파일
- sqlMapConfig.xml 설정 => db.properties, sqlMapConfig, mapper를 이미 설정완료
별칭만 지정
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="kr.co.jhta.board.dto.BoardDTO" alias="bdto"/>
</typeAliases>
</configuration>
- mapper 설정 namespace 및 각 sql문 별칭 지정
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.co.jhta.board">
<select id="selectAll" resultType="bdto">
SELECT * FROM board
ORDER BY bno DESC
</select>
</mapper>
- list페이지에 데이터 전체 조회 출력
- dbcp로 썼더니 동시에 컨넥션풀로 너무 많이 접근 함
- 톰캣 하나당 풀로 들어옴 사용자도 많고 db에 리스너가 감당을 못함
- 게시판 clud 구현
- 트랜잭션 구현
복습 할 것
tip.
용어
'자바 풀스택 교육 > Spring' 카테고리의 다른 글
Spring 교육정리 15일차 (0) | 2020.02.25 |
---|---|
Spring 교육정리 14일차 (0) | 2020.02.24 |
Spring 교육정리 12일차 (0) | 2020.02.20 |
Spring 교육정리 11일차 (0) | 2020.02.19 |
Spring 교육정리 9일차 (0) | 2020.02.18 |