java

스프링

rewind 2024. 2. 6. 14:54

ContactInfo insert 확인하기

@Validation 어노테이션 사용해서

 

폼태그로 에러메세지 출력 확인하기

<?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.or.ddit.mapper.ContactInfoMapper">

	<!-- mapper인터페이스의 메소드명과 mapper xml의 id와 동일 -->
	<insert id="insert" parameterType="contactInfoVO">
		<selectKey resultType="String" order="BEFORE" keyProperty="ciCd">
			SELECT NVL(SUBSTR(MAX(CI_CD),1,10) || TRIM(TO_CHAR(SUBSTR(MAX(CI_CD),-3)+1,'000')),
   			     'CI' || TO_CHAR(SYSDATE,'YYYYMMDD') || '001')
			FROM   CONTACT_INFO
			WHERE  CI_CD LIKE 'CI' || TO_CHAR(SYSDATE,'YYYYMMDD') || '%'
		</selectKey>

		insert into contact_info (CI_CD, CI_NAME, CI_MAIL, CI_SUBJ, CI_IMG_URL, CI_MESG, CI_REG_DT, REGISTER_ID, REGIST_DT)
		values(#{ciCd} ,#{ciName} , #{ciMail} , #{ciSubj} , #{ciImgUrl} ,#{ciMesg} , #{ciRegDt} , 'admin' , sysdate)
	</insert>

</mapper>

 

 

트랜잭션

 

한 트랜잭션 진행시 종료되기 전까지 select(조회)만 가능(insert , delete , update 불가)

 

스프링에서 트랜잭션 처리하기

 

servlet-context.xml

root-context.xml에 추가 작성

	xmlns:tx="http://www.springframework.org/schema/tx"

 

   <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">
   
   
--------------------------------------------------------------------------------------------------------------
    <!-- 파일업로드 디렉토리 설정 아래쪽에 작성 -->
   
   <!-- 트랜잭션 관리자의 빈을 정의 -->
   <bean id="transactionManager" 
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"></property>
   </bean>
      <!-- 어노테이션 기반의 트랜잭션 제어를 활성화함 -->
   <tx:annotation-driven/>

 

스프링에서 트랜잭션 관리를 대신 해준다 -> 해당 메소드에 @Transactional 선언

 

 

 

<?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.or.ddit.mapper.ContactInfoMapper">

	<!-- mapper인터페이스의 메소드명과 mapper xml의 id와 동일 -->
	<insert id="insert" parameterType="contactInfoVO">
		<selectKey resultType="String" order="BEFORE" keyProperty="ciCd">
			SELECT NVL(SUBSTR(MAX(CI_CD),1,10) || TRIM(TO_CHAR(SUBSTR(MAX(CI_CD),-3)+1,'000')),
   			     'CI' || TO_CHAR(SYSDATE,'YYYYMMDD') || '001')
			FROM   CONTACT_INFO
			WHERE  CI_CD LIKE 'CI' || TO_CHAR(SYSDATE,'YYYYMMDD') || '%'
		</selectKey>

		insert into contact_info (CI_CD, CI_NAME, CI_MAIL, CI_SUBJ, CI_IMG_URL, CI_MESG, CI_REG_DT, REGISTER_ID, REGIST_DT)
		values(#{ciCd} ,#{ciName} , #{ciMail} , #{ciSubj} , #{ciImgUrl} ,#{ciMesg} , #{ciRegDt} , 'admin' , sysdate)
	</insert>
	
	<resultMap type="contactInfoVO" id="contactInfoMap">
		<result property="ciCd" column="CI_CD"/>
		<result property="ciName" column="CI_NAME"/>
		<result property="ciMail" column="CI_MAIL"/>
		<result property="ciSubj" column="CI_SUBJ"/>
		<result property="ciImgUrl" column="CI_IMG_URL"/>
		<result property="ciMesg" column="CI_MESG" jdbcType="CLOB" javaType="java.lang.String"/>
		<result property="ciRegDt" column="CI_REG_DT"/>
		<result property="registerId" column="REGISTER_ID"/>
		<result property="registDt" column="REGIST_DT"/>
	</resultMap>
	
	<!-- 방문 상세 -->
	<select id="detail" parameterType="String" resultMap="contactInfoMap">
		select CI_CD, CI_NAME, CI_MAIL, CI_SUBJ, CI_IMG_URL, CI_MESG, CI_REG_DT, REGISTER_ID, REGIST_DT
		  from contact_info
		 where ci_cd = #{ciCd}
	</select>

</mapper>

 

DB에서 컬럼 타입이 CLOB일때는 아래와 같이 타입 처리 해줘야 함

		<result property="ciMesg" column="CI_MESG" jdbcType="CLOB" javaType="java.lang.String"/>

 

detail.jsp 생성

 

ContactInfoController에 detail 메소드 작성

	/*
	   요청URI : /contactInfo/detail
	   요청파라미터 : ciCd=CI20240206001
	   요청방식 : get
	*/
	// <form:form modelAttribute="contactInfoVO"
	@GetMapping("/detail")
	public String detail(ContactInfoVO contactInfoVO) {
		log.info("detail -> contactInfoVO : " + contactInfoVO);
		
		//forwarding : jsp
		return "contactInfo/detail";
		
	}

 

detail.jsp 페이지 만들어보기

 

 

스프링 AOP

 

Aspect Oriented Programing

 

 

로그

보안

트랜잭션

에러

 

스프링내에서 관리해줌

횡단관심사의 분리

여러 모듈에서 공통적이고 반복적인 처리를 요구하는 부분을 한곳으로 모은다

 

form.xml -> aop dependency 추가 jrt는 이미 있으므로 생략 가능

<!-- AOP(Aspect Oriented Programming : 관점 지향 프로그래밍) 시작 
      1) aspectjrt => 이미 있으므로 생략
      2) aspectjweaver => 없으므로 의존 관계를 정의
      -->
      <!-- https://mvnrepository.com/artifact/aspectj/aspectjweaver
      1.5.4 -->
  
      <!-- AspectJ Weaver -->
      <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjweaver</artifactId>
          <version>${org.aspectj-version}</version>
      </dependency>
      <!-- AspectJ Tools -->
      <dependency>
          <groupId>org.aspectj</groupId>
          <artifactId>aspectjtools</artifactId>
          <version>${org.aspectj-version}</version>
      </dependency>
      <!-- AOP(Aspect Oriented Programming : 관점 지향 프로그래밍) 끝 -->

 

maven build - root-context.xml 아래 내용 작성

<!-- 스프링 AOP 활성화 -->
   <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
   
   <!-- kr.or.ddit.aop 패키지를 컴포넌트 스캔 대상으로 등록 -->
   <context:component-scan base-package="kr.or.ddit.aop"></context:component-scan>

 

윗부분에 xmlns 변경

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
   xmlns:aop="http://www.springframework.org/schema/aop"
   xmlns:tx="http://www.springframework.org/schema/tx"
   xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">

 

kr.or.ddit.aop 패키지 생성