スプリング20鋼-@Controller、@ResquestMapping、MyBatis

70367 ワード

スプリングフレーム(既定)+boot/SPA/VUE/レギュレータ...
DI->もう書き終わった!(サービスからデータをインポートする場合、コントローラからサービスをインポートする場合)
サービスではDaodao=DaogetInstance(); Daoオブジェクトを作成して使用しました(継承を受け入れなくても!)
スプリングで、Daoに@Autowired終了と書きます

コントローラ宣言(Annotation)

  • クラス、ノイズを含む
  • スプリングフレーム(設計モード+ライブラリ集合)は、Webブラウザからの要求(要求)を受け付けるコントローラとみなし、Java beanとして登録する管理
  • を行う.
    モデル:コントローラが返すデータ(VOオブジェクト、List、List、Map、List、JSON)
    返却する.
    1)転送(データOを含む)
    2)リダイレクト(データロードX)
    View:画面はexを表します)localhost:8090/create

    requestmapping宣言

  • WebブラウザリクエストによるJavaメソッドの指定
    メソッド:プロパティ.httpリクエストメソッド
    1)GET:データを変更しない
    2)POST:データ変更時に
  • を使用する
  • GETメソッドを使用した
  • はWebブラウザにのみ表示され、データは変更されません

    BookController.java

    package kr.or.ddit;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.servlet.ModelAndView;
    
    //컨트롤러 어노테이션(Annotation)
    //어노테이션이 있는 클래스
    //스프링프레임워크(디자인패턴 + 라이브러리 집합)가 웹 브라우저(크롬)의 요청(request)을 받아들이는 컨트롤러라고 인지해서
    //자바 빈(java Bean)으로 등록해서 관리
    
    @Controller
    public class BookController {
    	//Model : 컨트롤러가 반환할 데이터(VO객체, List, List<VO>, Map, List<Map>, JSON)를 담당
    	//			반환? 1)forward(데이터 담기 O)	2) redirect(데이터 담기 X)
    	
    	//View : 화면 담당
    	//localhost:8090/create
    	
    	//요청을 매핑한다
    	@RequestMapping(value="/create", method=RequestMethod.GET)
    	public ModelAndView create() {
    		ModelAndView mav = new ModelAndView();
    		//원래는 localhost:8090/WEB-INF/view/book/create.jsp
    		
    		//servlet-context.xml에서...
    		//prefix : /WEB-INF/views/
    		mav.setViewName("/book/create");
    		//suffix : .jsp
    		return mav;
    	}
    	//주문하면 아래 메서드로 매핑
    	@RequestMapping(value="/make", method=RequestMethod.GET)
    	public ModelAndView make() {
    		//라이더에 태워서 짬뽕 배송
    		ModelAndView mav = new ModelAndView();
    		//짬뽕 위치 알려주기
    		mav.setViewName("book/make");
    		//배송하기
    		return mav;
    	}
    	//RequestMapping 어노테이션 : 웹 브라우저의 요청에 실행되는 자바 메소드를 지정해줌
    	//method : 속성. http 요청 메소드를 의미함
    	//			1) GET : 데이터를 변경하지 않는 경우 사용
    	//			2) POST : 데이터가 변경될 경우 사용
    	//웹 브라우저에 화면을 보여줄 뿐 데이터의 변경이 일어나지 않으므로 GET 메소드를 사용한 것임
    	//jjajang() 메소드는 웹 브라우저에서 /jjajang 주소가 GET 방식으로 입력되었을 때 book/jjajang 경로의 뷰를 보여줌
    	
    	@RequestMapping(value="/jjajang", method=RequestMethod.GET)
    	public ModelAndView jjajang(ModelAndView mav) { //라이더 생성
    		// book/jjajang : 뷰의 경로
    		mav.setViewName("book/jjajang");
    		return mav;
    	}
    }
    

    MyBatisとは?


    xmlを使用してクエリーを作成できるライブラリ
    順序の設定
    1.https://mvnrepository.com/->mybatisの検索>をクリックします.mybatis?mybatis?3.5.9->中間のコードをコピー->pom.xmlに貼り付けると、
    C:\Users\PC-12.m 2repositoryorgmybatismybatis3.5.9に組み立てる
  • mybatis-spring(2つのライブラリを接続)検索->2.0.6クリック->中間コードのコピー
    -> pom.xmlに貼り付けると、C:UsersPC-12になります.m 2repositoryorgmybatismybatis-spring2.0.6に組み立てる
  • スプリングにjdbcを使用するには、次の手順に従います.
    Spring-jdbc検索-5.2.5(springと同じ)をクリック-中間コード-pomをコピーします.xmlを貼り付けると、${org.springframework-version}
    次のように変更

    DBPPオフ
    commons-dbcp 2検索-2.90クリック-中間コード-pomをコピーします.xmlの貼り付け

    log 4 jダウンロード
    log 4 jdbc-log 4 j 2-jdbc 4-を検索1.16-をクリックして中間コード-pomをコピーします.xmlの貼り付け

    ojdbc 6オフ
    ojdbc 6-を検索11.2.04-をクリックして中間コード-pomをコピーします.xmlの貼り付け

    Lombok Down
    lombok検索-1.18.22クリック-中間コード-pomをコピーします.xmlの貼り付け

    サーバーの停止
    コンソールクリア後
    プロジェクトrun as->4回mavenを右クリック
    ->ウィンドウを表示しないで、BUILD SUCCESが出てきたら成功!
  • root-context.xml修正
  • root-context.xml:スプリングプロファイル
  • ビューに関係のないオブジェクト(蒸し器設定)
  • を定義します.
    構成
  • サービス(機能、ビジネスロジック)、DAO、DB等のビジネスロジックに関する設定
  • .

    root-context.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
    	
    	<!-- Root Context: defines shared resources visible to all other web components -->
    	
    	<!-- 
    		root-context.xml : 스프링 설정 파일
    		
    		view와 관련되지 않은 객체를 정의(찐 스프링 설정)
    		Service(기능, 비즈니스 로직), DAO(Repository), DB등 비즈니스 로직과 관련된 설정
    	-->
    	<!-- dataSource? 데이터베이스와 관련된 정보를 세팅 -->
    	<bean id="dataSource"
    		class="org.apache.commons.dbcp2.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="jspexam" />
    		<property name="password" value="java" />
    	</bean>
    	<!-- 
    	sqlSessionFactory는 데이터베이스와 연결을 맺고 끊어질 때까지의 
    	라이프 사이클을 관리하는 sqlSession 객체를 만듦
    	 -->
    	<bean id="sqlSessionFactory"
    	class="org.mybatis.spring.SqlSessionFactoryBean">
    		<!-- 데이터소스를 설정 -->
    		<property name="dataSource" ref="dataSource" />
    		<!-- 매퍼 xml 파일의 위치.  -->
    		<property name="mapperLocations"
    		value="classpath:/sqlmap/**/*_SQL.xml" />
    		<property name="configLocation"
    		value="/WEB-INF/mybatisAlias/mybatisAlias.xml" />
    	</bean>
    	<!--
    	데이터베이스에 개별적으로 쿼리를 실행시키는 객체. 우리는 소스코드에서 이 객체를 사용하여 Query를 실행시킴*** 
    	-->
    	<bean id="sqlSessionTemplate"
    	class="org.mybatis.spring.SqlSessionTemplate">
    		<constructor-arg index="0" ref="sqlSessionFactory" />
    	</bean>
    </beans>
    

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>kr.or</groupId>
    	<artifactId>ddit</artifactId>
    	<name>springProj</name>
    	<packaging>war</packaging>
    	<version>1.0.0-BUILD-SNAPSHOT</version>
    	<properties>
    		<java-version>1.8</java-version>
    		<org.springframework-version>5.2.5.RELEASE</org.springframework-version>
    		<org.aspectj-version>1.6.10</org.aspectj-version>
    		<org.slf4j-version>1.6.6</org.slf4j-version>
    	</properties>
    	<dependencies>
    		<!-- Spring -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>${org.springframework-version}</version>
    			<exclusions>
    				<!-- Exclude Commons Logging in favor of SLF4j -->
    				<exclusion>
    					<groupId>commons-logging</groupId>
    					<artifactId>commons-logging</artifactId>
    				 </exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    				
    		<!-- AspectJ -->
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjrt</artifactId>
    			<version>${org.aspectj-version}</version>
    		</dependency>	
    		
    		<!-- Logging -->
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-api</artifactId>
    			<version>${org.slf4j-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>jcl-over-slf4j</artifactId>
    			<version>${org.slf4j-version}</version>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    			<version>${org.slf4j-version}</version>
    			<scope>runtime</scope>
    		</dependency>
    		<dependency>
    			<groupId>log4j</groupId>
    			<artifactId>log4j</artifactId>
    			<version>1.2.15</version>
    			<exclusions>
    				<exclusion>
    					<groupId>javax.mail</groupId>
    					<artifactId>mail</artifactId>
    				</exclusion>
    				<exclusion>
    					<groupId>javax.jms</groupId>
    					<artifactId>jms</artifactId>
    				</exclusion>
    				<exclusion>
    					<groupId>com.sun.jdmk</groupId>
    					<artifactId>jmxtools</artifactId>
    				</exclusion>
    				<exclusion>
    					<groupId>com.sun.jmx</groupId>
    					<artifactId>jmxri</artifactId>
    				</exclusion>
    			</exclusions>
    			<scope>runtime</scope>
    		</dependency>
    
    		<!-- @Inject -->
    		<dependency>
    			<groupId>javax.inject</groupId>
    			<artifactId>javax.inject</artifactId>
    			<version>1</version>
    		</dependency>
    				
    		<!-- Servlet -->
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>servlet-api</artifactId>
    			<version>2.5</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet.jsp</groupId>
    			<artifactId>jsp-api</artifactId>
    			<version>2.1</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>jstl</artifactId>
    			<version>1.2</version>
    		</dependency>
    	
    		<!-- Test -->
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.7</version>
    			<scope>test</scope>
    		</dependency>
    		
    		<!-- Database 라이브러리 시작 -->
    		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    		<!-- XML로 쿼리를 작성하게 해주는 라이브러리 -->
    		<dependency>
    		    <groupId>org.mybatis</groupId>
    		    <artifactId>mybatis</artifactId>
    		    <version>3.5.9</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    		<!-- 스프링과 mybatis를 연동하게 해주는 라이브러리 -->
    		<dependency>
    		    <groupId>org.mybatis</groupId>
    		    <artifactId>mybatis-spring</artifactId>
    		    <version>2.0.6</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    		<dependency>
    		    <groupId>org.springframework</groupId>
    		    <artifactId>spring-jdbc</artifactId>
    		    <version>${org.springframework-version}</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
    		<!-- 데이터베이스 커넥션 풀. 커넥션을 미리 여러개 만들어 놓고, 빌려썼다가 사용이 끝나면 반납. -->
    		<dependency>
    		    <groupId>org.apache.commons</groupId>
    		    <artifactId>commons-dbcp2</artifactId>
    		    <version>2.9.0</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
    		<!-- Logging을 위한 라이브러리. Query를 console이나 파일 로그로 볼 수 있음 -->
    		<dependency>
    		    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    		    <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    		    <version>1.16</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc6 -->
    		<dependency>
    		    <groupId>com.oracle.database.jdbc</groupId>
    		    <artifactId>ojdbc6</artifactId>
    		    <version>11.2.0.4</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    		<!-- 
    			* 자바빈 클래스인 VO에서 Getter/Setter메서드, toString()메서드를 자동 생성
    			LoggerFactory 사용 가능
    		 -->
    		<dependency>
    		    <groupId>org.projectlombok</groupId>
    		    <artifactId>lombok</artifactId>
    		    <version>1.18.22</version>
    		    <scope>provided</scope>
    		</dependency>
    		<!-- Database 라이브러리 끝 -->
    	</dependencies>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-eclipse-plugin</artifactId>
                    <version>2.9</version>
                    <configuration>
                        <additionalProjectnatures>
                            <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                        </additionalProjectnatures>
                        <additionalBuildcommands>
                            <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                        </additionalBuildcommands>
                        <downloadSources>true</downloadSources>
                        <downloadJavadocs>true</downloadJavadocs>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.5.1</version>
                    <configuration>
                        <source>1.6</source>
                        <target>1.6</target>
                        <compilerArgument>-Xlint:all</compilerArgument>
                        <showWarnings>true</showWarnings>
                        <showDeprecation>true</showDeprecation>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.2.1</version>
                    <configuration>
                        <mainClass>org.test.int1.Main</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    sevlet-context.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans:beans xmlns="http://www.springframework.org/schema/mvc"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns:beans="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
    		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
    		http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
    	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
    	
    	<!-- Enables the Spring MVC @Controller programming model -->
    	<annotation-driven />
    
    	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
    	<!-- 정적 폴더  -> images, js, css와 같은 폴더들이 resources 밑에 들어감-->
    	<resources mapping="/resources/**" location="/resources/" />
    	<!-- 컨트롤러에서 return되는 string값(파일명) 앞 뒤로 조립되는 값 -->
    	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
    	<!--  prefix는 앞, suffix는 뒤에 붙는다 (ViewResolver가 조립해준다)-->
    	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    		<beans:property name="prefix" value="/WEB-INF/views/" />
    		<beans:property name="suffix" value=".jsp" />
    	</beans:bean>
    	
    	<context:component-scan base-package="kr.or.ddit" />
    	
    	
    	
    </beans:beans>