첫번째!  태그와 속성 지정 

1. 먼저, 어떤 태그와 속성을 사용할지를 선언한다. 

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
xml
 h4322   h1, h2
 paaak   p align=""
 1. DTD : 상단에 어떤 태그(태그명과 속성)를 사용할지를 선언
 2. 위에 선언 후, DTD에 맞는 태그를 활용 수 있다.
 -->
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" 
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:c="http://www.springframework.org/schema/c"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:util="http://www.springframework.org/schema/util"
	xmlns:websocket="http://www.springframework.org/schema/websocket"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
  	http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd     
    http://www.springframework.org/schema/util
    http://www.springframework.org/schema/util/spring-util.xsd
    http://www.springframework.org/schema/websocket
	http://www.springframework.org/schema/websocket/spring-websocket.xsd" >

두번째! <context:component-scan> 등록 

2. 컨테이너에 사용할 객체를 등록한다. 컨테이너에서 Bean형식으로 읽기 위해서 설정해주는 

<context:component-scan>태그와 

<context:include-filter> 태그가 있으며, <context:include-filter>는 component-scan의 하위태그이다.

	<context:component-scan base-package="springweb">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Dao"/>
	</context:component-scan>

여기서 잠깐! 

그렇다면!
<Context:component-scan>이란?
Bean이 될 수 있는 모든 Component를 자동으로 찾아 Bean container에 등록해준다. 
패키지명 이후의 하위 패키지를 검색해 
@Component 어노테이션을 포함하는 모든 클래스를 
Bean으로 자동 등록해준다. 
그렇다면 , annotaion이란?
프로그램 코드의 일부가 아닌 프로그램에 관한 데이터를 제공하는 것이다.  
코드에 정보를 추가하는 정형화된 방법이다.
즉, 
프로그램에 추가적인 정보를 제공해주는 메타데이터(data를 위한 data) 라고 볼 수 있다. 
@Component 어노테이션이 달린 클래스를 Bean으로 자동 등록/생성해준다는의미다.


그렇다면!annotaion에는 어떤 종류가있을까?



@controller : 스프링MVC의 컨트롤러 객체임을 명시하는 어노테이션
@RequestMapping : 특정 URI에 매칭되는 클래스나 메소드임을 명시하는 어노테이션
@ModelAttribute: view에서 전달해주는 파라미터를 클래스의 멤버변수로 binding 해주는 어노테이션

 

세번째! DB 연동

1. connection pool 처리
		1) 드라이버, 주소, 계정, 비번
	 -->	
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
		destroy-method="close">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>	
		<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>	
		<property name="username" value="scott"/>	
		<property name="password" value="tiger"/>	
	</bean>

Spring의 좋은 점 중 하나는 connection full을 일일이 지정해주지 않아도된다는 것에 있다.

property 속성값으로 드라이버, 주소,계정,비번을 입력하고 

bean의 아이디와 class값을 설정해주면, 이후부터는 connection 을 따로 써주지 않아도 자동연동처리된다. 

참 간단하죵? 

 

네번째! mybatis연동 

2. Mybatis와 연동
		1) dbcp연결
		2) java/resource/mybatis.Spring.xml
			로 공통 연결 처리..
	 --> 
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource"/>
		 
		<property name="configLocation"
			value="classpath:resource/mybatis.Spring.xml" />
		
	</bean>

세번째에 선언해놓은, dataSource라는 DB 연동 소스를 참고하여 mybatis.srping.xml에 값을 매핑시켜준다. 

여기서 Mybatis란?

Mybatis는 자바object 와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크이다.

JDBC의 모든 기능은 mybatis가 대부분 제공하기때문에  JDBC코드를 작성하지 않아도되며,

복잡한 JDBC코드를 걷어낼 수 있기 때문에 깔끔한 소스코드를 유지할 수 있다.

수동적인 파라미터 설정과 쿼리 결과에 대한 맵핑 구문을 제거할 수 있다. 

다섯번째! DAO의 인터페이스 위치를 설정 

 

  1. 	3. dao 인터페이스 페이지 위치를 설정..
    		인터페이스 ==> 인터페이스의 상속받은
    			 실제객체생성(mybatis 프레임웍 XXXmapper.xml)
    		name="basePackage" value="dao경로1, dao경로2,..."
    	 -->
    	<bean 
    		class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    		<property name="basePackage" value="springweb.a05_mvc.a03_dao"/>
    	</bean>
    인터페이스의 상속받은 실제 객체를 생성하는 것은 mybatisframework에서 진행한다. xxxmapper.xml

      name= "basePackage"로 지정한다면 vlaue="dao경로1" "dao경로2" 의 식으로 작성한다. 

 

오늘은 다소 직관적인 방법으로 정리해봤다.
ppt로 정리하면서 메서드, 데이터, 화면의 흐름을 읽는게 
공부하는데 훨씬 도움이 많이된다.




<DB연결하여 화면구현하기!>

1. Student SQL테이블 생성 

2. 변수명을 맞추어 VO class 생성 

3. DAO 클래스 생성 (java)  ****** DAO클래스에는 속성, 메서드, 생성자가있다.

4. jsp화면에서 DAO를 객체로 만들어 접근자 생성 

5. 접근자를 통해 데이터를 가져와 for each 구문활용하여 데이터할당 

질문하며 깨닫게 된
주요포인트 (개인적 발전을 위한)

 

1. 왜 dao.getStudent(); 라는 식으로 메서드 자체를 사용하여 데이터를 끌어오는가? 라는 질문 

==> jsp 화면에서 ArrayList타입으로 <Student>변수를 담아준 후 , 이름은 emplist로 설정해준 후, 

dao.getStudent()메서드의 결과값을 넣어주고 dao.getStudent() 라는 직접인용말고 emplist를 그자리에 대입해주었더니

같은 결과값이 나왔다. 이것은 사용하는사람의 편의에 따라 다른것

(어떤 것이 효율적인지는 개인의 판단일 것 같아요)

2. tot = 0; 은 왜 for구문 위에 사용하는가?

for()구문 내에 사용하면, for 구문 내에서만 유효하므로, 다시 for구문이 시작될때 새로생성되는 tr에서는 초기값으로 변한다. 그렇기 때문에 한번 회전한 후에 평균점수가 [누적처리] 되게 하기위해서  for구문 바깥에 작성한다. 

3. emplist.size()를 사용하여 tot를 나눠주는이유 

ArrayList에서 size()메서드의 의미는 배열의 갯수를 말한다. 그러므로 배열의 갯수는 학생의 수를 의미한다. 

tot : 학생들의 평균값이 누적으로 담긴 값 

emplist.size(): 학생 수 

이므로 전체 평균점수가 나오겠죠. 

3. for each 구문

왜인지, for each구문은 아직도 헷갈리는데,

for( 타입명  접근자.객체명) {

접근자.get***() 

방식으로 데이터를 할당 및 호출해주어야 함

+ Recent posts