예제 순서

- 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 설정 파일

 

classpath

- 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

+ Recent posts