mjeongriver
article thumbnail
Published 2023. 2. 3. 18:08
day77-spring TIL/Spring

1. mysql 다운로드 - 다운받은 파일 열고 커스텀 선택

 

이 부분만 확인하고 나머지는 모두 next

 

- 간혹 가다 안 될 경우 삭제(다시 설치 파일 누른 후에 remove) 진행

- c 드라이브 들어가서 programfile, programfile x86, program data 세군데 폴더에서 mysql 폴더 삭제

 

2번째 사진 폴더 들어가서 찌꺼기 모두 지울 것

 

데이터 베이스 들어갈 때

 

우측 클릭 - edit connection - 정보 확인 - 다시 1번째 사진창으로 돌아와서 더블 클릭 후 로그인

 

- 오라클 설치하고 sqldeveloper, mysql 설치하고 쉽게 들어갈 수 있는 개발 툴 = workben

- connection Method: tcp/it 통신이 기본이고 회사에 가면 3번째 사진처럼 hostname, 리눅스 운영체제에 맞게 변경할 수 있음

 

2. 스키마 생성, 계정 생성, 권한 부여

 

홈 화면 누르고 옆에 있는 창 꺼줄 것

 

-- 주석 
## 주석, # 하나도 주석
#데이터 spring 스키마 생성(sys 스키마 안 쓸거임)
create database spring default character set utf8;

# 계정 생성 - 아이디 spring, 비밀번호 spring
create user 'spring' identified by 'spring';

# 권한 부여 - all privileges, 계정명 spring에게 스프링 스키마에 접근할 수 있게 모든 권한을 줌 
grant all privileges on spring.* to 'spring';

 

아이디랑 비밀번호에 spring 입력 하고 test connection 그 다음에 옆에 있는 ok 버튼 눌러줄 것(권한 부여 완료되면 마지막 사진처럼 나옴)

 

+ 추가

 

sql Addtions 창 숨기기

# varchar2 → varchar로 변경
# number(10) → int(최대 자릿수)로 변경, int(8)은 number(10)과 의미가 다름. 8은 byte의 크기
# 날짜형: date → date or timestamp(시, 분, 초까지 나타내줌)
# 시퀀스 → 자동 증가값: auto_increament
# 함수 → 구글에 찾아봄
# 조인 → 완벽 동일
# 서브 쿼리 → 
# mysql은 version 별로 대소문자를 구분할 수도 있고, 구분을 안할 수도 있습니다.

create table score(
	## auto_increament는 자동으로 증가하는 값
	num int primary key auto_increment,
    name varchar(30) not null,
    kor int default 0,
    eng int default 0
);

drop table score;

 

- 테이블 생성(1)

 

더블 클릭해서 진하게 만들어줌

 

- 원래는 spring.score라고 써줘야 하는데 spring 더블 클릭해서 진하게 만들어주면 score라고 써도 됨.

 

- 테이블 생성(2)

 

테이블에서 우측 클릭 - create table - table name: score로 지정해주기

 

# varchar2 → varchar로 변경
# number(10) → int(최대 자릿수)로 변경, int(8)은 number(10)과 의미가 다름. 8은 byte의 크기
# 날짜형: date → date or timestamp(시, 분, 초까지 나타내줌)
# 시퀀스 → 자동 증가값: auto_increament
# 함수 → 구글에 찾아봄
# 조인 → 완벽 동일
# 서브 쿼리 → 테이블 엘리어스가 반드시 들어갑니다. (필수!)
# mysql은 version 별로 대소문자를 구분할 수도 있고, 구분을 안할 수도 있습니다.

create table score(
	## auto_increament는 자동으로 증가하는 값
	num int primary key auto_increment,
    name varchar(30) not null,
    kor int default 0,
    eng int default 0
);

drop table score;

select * from score;
insert into score (name, kor, eng) values('홍길자', 30, 30);

-- 서브 쿼리절에서는 엘리어스가 꼭 붙어야 합니다.
select A.* 
from (select * 
from score) A;

-- mysql 설정들을 볼 수 있는 문장들: autocommit이 자동으로 켜져있음
-- 적용 하자마자 바로 commit 들어감
select @@autocommit; -- 얘는 확인
set autocommit = 1; -- 키고
set autocommit = 0; -- 끄고

 

- spring java에 file.txt로 넣어둘 것

 

 

3. DB 연결

1) mySQL

 

https://mvnrepository.com/

maven 레파지토리 들어가서 복사해서 pom.xml에 붙이기(6번째 사진은 connection pool 검색)

 

+ 마지막 사진 다시 수정

		<!-- mysql 커넥터 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.32</version>
		</dependency>

		<!-- 스프링 jdbc 모듈 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- 히카리 커넥션 풀 -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>3.3.1</version>
		</dependency>

		<!-- 테스트 환경 : Spring-test 모듈 and junit 기능 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
			<scope>test</scope>
		</dependency>
		
		<!-- Test 버전은 최소 4.12 이상-->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

 

- 하고 나서 maven-update project

 

3번째: datasource라는 애를 bean으로 사용이 가능합니다. 5번째: mysql에서 스키마가 spring이니까 spring으로 지정

 

- 최종

 

3번째 사진처럼 해줘야 오류 발생이 안남!

 

- hikariCp 옵션들

 

 

- 추가 :Spring test 라이브러리를 사용하는 방법

 

property

 

여기서 마우스 우클릭 하고 run as-junit 실행

 

* JDBCTest

package com.simple.basic;

import java.sql.Connection;

import javax.sql.DataSource;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class) //junit으로 테스트 환경을 구성
@ContextConfiguration("file:src/main/webapp/WEB-INF/config/root-context.xml") //동작시킬 스프링 설정 파일
public class JDBCTest {
	
//	@BeforeClass //해당 클래스에서 단 한번 실행-static
//	public static void loadTest() {
//		System.out.println("beforeClass");
//	}
//	
//	@Before //각 테스트 코드를 싱행하기 전에 우선 실행
//	public void testCode00() {
//		System.out.println("before");
//	}
	
	@Autowired
	DataSource dataSource;
	
	@Test //test 코드로 실행함
	@Order(1)
	public void testCode01() {
		
		try {
			//datasource에서 conn 객체 얻음
			Connection conn = dataSource.getConnection();
			System.out.println(conn);
			
		} catch (Exception e) {
			
		} 
		
	}
	
//	@Test //test 코드로 실행함
//	@Order(2)
//	public void testCode02() {
//		System.out.println("실행됨2");
//	}

}

 

* ScoreDAOImpl

 

 

 

package com.simple.score.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.simple.command.ScoreVO;

@Repository("yyy")
public class ScoreDAOImpl implements ScoreDAO{

	@Autowired
	private DataSource dataSource;

	@Override
	public void regist(ScoreVO vo) {

		String sql = "insert into score(name, kor, eng) values(?, ?, ?)";

		Connection conn = null;
		PreparedStatement pstmt = null;
		try {

			conn = dataSource.getConnection();

			pstmt = conn.prepareStatement(sql);

			pstmt.setString(1, vo.getName());
			pstmt.setString(2, vo.getKor());
			pstmt.setString(3, vo.getEng());

			pstmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn != null) conn.close();
				if(pstmt != null) conn.close();

			} catch (Exception e2) {

			}
		}
	}

	@Override
	public ArrayList<ScoreVO> getList() {

		ArrayList<ScoreVO> list = new ArrayList<>();

		String sql = "select * from score order by num desc";
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null; //데이터를 저장하는 객체

		try {
			conn = dataSource.getConnection();

			pstmt = conn.prepareStatement(sql);

			rs = pstmt.executeQuery();

			//vo 클래스와 맵핑 시켜서 담아야 하니까 orm 작업을 한다.
			//ORM → object relational mapping
			while(rs.next()) {
				ScoreVO vo = new ScoreVO();
				vo.setNum( rs.getInt("num") ); //column명
				vo.setName(rs.getString("name") );
				vo.setKor(rs.getString("kor") );
				vo.setEng(rs.getString("eng"));

				list.add(vo);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn != null) conn.close();
				if(pstmt != null) conn.close();
				if(rs != null) conn.close();
			} catch (Exception e2) {

			}
		}

		return list;
	}

	@Override
	public void delete(int num) {

		//삭제 기능 = num은 key가 아니라 index가 넘어옵니다. 
		//화면에서 
		//화면에서 key를 넘기도록 변경
		//delete 기능 구현.
		
		String sql = "delete from score where num=?";
		
		Connection conn = null;
		PreparedStatement pstmt = null;

		try {
			//db연결해서
			conn = dataSource.getConnection();
			//sql 전달하고 
			pstmt = conn.prepareStatement(sql);
			//sql문장에 delete from score where num=? ?값을 준다.
			pstmt.setInt(1, num);

			//삭제 성공하면 1을 반환하고, 실패하면 0을 반환한다.
			//실행한다.
			int result = pstmt.executeUpdate();
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				if(conn != null) conn.close();
				if(pstmt != null) conn.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		
	}


}

- 결과가 안나올 때 return 값 확인해볼 것!

 

* ScoreVO 수정

package com.simple.command;

public class ScoreVO { //DTO
	private int num;
	private String name;
	private String kor;
	private String eng;
	
	//생성자
	public ScoreVO(int num, String name, String kor, String eng) {
		this.num = num;
		this.name = name;
		this.kor = kor;
		this.eng = eng;
	}

	//getter, setter
	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getKor() {
		return kor;
	}

	public void setKor(String kor) {
		this.kor = kor;
	}

	public String getEng() {
		return eng;
	}

	public void setEng(String eng) {
		this.eng = eng;
	}

	//toString
	@Override
	public String toString() {
		return "ScoreVO [num=" + num + ", name=" + name + ", kor=" + kor + ", eng=" + eng + "]";
	}
	
}

 

- 삭제는 view에서 scoreList 수정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h3>목록 화면</h3>
	<!--  
	for(int article: list){
	}
	-->
	
	<!-- 인덱스 번호 찍으려면 varStatue="num" 선언 해줄 것 -->
	<c:forEach var="article" items="${list }" varStatus="num">
	<!-- forEach는 반복문으로 돌려서 num을 순서대로 했었음: 데이터베이스 연동 전에 번호를 순서대로 주려고  -->	
	 ${num.index }
	 <!-- 데이터베이스에는 article.num으로 들어오니까 아래에 num값도 article.num으로 줘야함 -->
	 ${article.num }
	 ${article.name } 
	 ${article.kor }
	 ${article.eng }
	 <!-- 원래 삭제는 포스트 방법으로 해야함 --> 
	 <!--  <a href="delete?키=값">삭제</a> -->
	 <!-- <a href="delete?num=인덱스 번호를 실어줌">삭제</a> -->
	 <!-- 다시 컨트롤러(delete)를 탐 -->
	 <!-- num이라는 키는 index값이 들어가고 있었는데, num이라는 키로 바뀌어야함. -->
	 <a href="delete?num=${ article.num }">삭제</a>
	 <br/>
	</c:forEach>
	

	
</body>
</html>

 

- 결과 화면 

 

 

 

- 오류: 웹 애플리케이션 인스턴스는 이미 중지되었습니다.

 

 

2) 오라클로도 데이터 베이스 연결하기

 

- pom.xml하고 root 수정

 

더보기

- 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>com.simple</groupId>
	<!-- context.path로 잡아버림: 주소창에 http://localhost:8282/controller/request/ex01 -->
	<artifactId>basic</artifactId>
	<name>SpringBasic</name>
	<packaging>war</packaging>
	<version>1.0.0-BUILD-SNAPSHOT</version>

	<!-- context.path 변경, artifactID를 변경하고 톰캣의 module에서 변경 -->

	<!-- pom.xml에서 사용할 변수들 -->
	<!-- 1. 자바 버전 11로 변경, springframework-version은 5.0.7로 변경 -->
	<properties>
		<java-version>11</java-version>
		<org.springframework-version>5.0.7.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 -->
		<!-- 2. 자바에서 제공해주는 서버 환경: 메이븐 레파지토리로 들어가서 서블릿 버전 최소 3.1 이상으로 변경 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</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>

		<!-- mysql 커넥터 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.32</version>
		</dependency>

		<!-- 스프링 jdbc 모듈 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- 히카리 커넥션 풀 -->
		<dependency>
			<groupId>com.zaxxer</groupId>
			<artifactId>HikariCP</artifactId>
			<version>3.3.1</version>
		</dependency>

		<!-- 테스트 환경 : Spring-test 모듈 and junit 기능 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${org.springframework-version}</version>
			<scope>test</scope>
		</dependency>

		<!-- Test 버전은 최소 4.12 이상 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>

		<!-- 오라클 커넥터 -->
		<dependency>
			<groupId>com.oracle.database.jdbc</groupId>
			<artifactId>ojdbc8</artifactId>
			<version>21.1.0.0</version>
		</dependency>

	</dependencies>


	<!-- 3. 메이븐 설정: 메이븐 컴파일 버전은 3.8.1로 변경, 컴파일 자바 레벨 11 -->
	<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>3.8.1</version>
				<configuration>
					<source>11</source>
					<target>11</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>

 

- root

<?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:jdbc="http://www.springframework.org/schema/jdbc"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 데이터 베이스 연결 작업, 설정 -->
	<!--  
	<bean id="hikari" class = "com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
		<property name="jdbcUrl" 		 value="jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Seoul"/>
		<property name="username" 		 value="spring"/>
		<property name="password" 		 value="spring"/>
	</bean>
	-->
	<bean id="hikari" class = "com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="jdbcUrl" 		 value="jdbc:oracle:thin:@localhost:1521:xe"/>
		<property name="username" 		 value="jsp"/>
		<property name="password" 		 value="jsp"/>
	</bean>
	
	
	
	<!-- 데이터 베이스 정보를 주입 -->
	<bean class="com.zaxxer.hikari.HikariDataSource">
		<constructor-arg ref="hikari"></constructor-arg>
	</bean>

</beans>

 

- JDBCtest에서 junit으로 한번 돌려볼 것(밑에 캡쳐는 성공시)

 

 

-  외부 프로퍼티스에 저장 가능(오라클 7강 교안 확인)

 

classpath:/ src/main/resource로 들어가게 됩니다.

 

루트 컨텍스트에 있는 값 그대로 가져 올 것!

 

루트 컨텍스트의 value값 수정

 

이렇게 수정해줄 것 

 

- 결과 화면이 이렇게 잘 나와야하고, junit도 초록색 창이 떠야함

 

 

4. MyBatis

 

xml 파일 영구적으로 제공됨, 5번째 사진 잘 봐둘 것!

 

- 메이븐 프로젝트에서 복사한 거 pom.xml에 붙여넣을 것, 그리고 나서 maven-update project

 

마지막 사진: 루트 컨텍스트 소스(아래 탭)에 이제 추가할 것! 그러면 선언 완료

 

- 빈으로 전달 되서 데이터 베이스 잘 관리되고 있는지 테스트 코드 뽑아 볼 것

 

sessionfactory bean이 잘 생성 된 것!

* JDBCMybatis

더보기
package com.simple.basic;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.simple.basic.mapper.TestMapper;

@RunWith(SpringJUnit4ClassRunner.class) //junit으로 테스트 환경을 구성
@ContextConfiguration("file:src/main/webapp/WEB-INF/config/root-context.xml") //동작시킬 스프링 설정 파일
public class JDBCMybatis {
	
	@Autowired
	SqlSessionFactoryBean sqlSessionFactory;

	//인터페이스 주입
	@Autowired
	TestMapper testMapper;
	
	@Test
	public void testCode01() {
		//마이 바티스 핵심 객체
		System.out.println(sqlSessionFactory);
		
	}
	
	@Test
	public void testCode02() {
		String time = testMapper.getTime();
		System.out.println(time);
	}
}

 

- mapper 생성(java, xml): 이름은 반드시 동일하게 생성할 것!

 

- 그리고 xml에 강의교안 8강: 마이바티스 매퍼_설정 코드 넣을 것

 

 

* TestMapper.java, TestMapper.xml 한 다음에 루트 컨텍스트로 이동!

더보기
package com.simple.basic.mapper;

public interface TestMapper {
	
	public String getTime();

}
<?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">
  
  <!-- namespace에 인터페이스의 풀 경로를 적습니다. -->
  <mapper namespace="com.simple.basic.mapper.TestMapper">
  
  <!-- id는 인터페이스의 메서드 명이 들어갑니다. resultType은 반환 타입 -->
  	<select id="getTime" resultType="string">
  		select now()
  	</select>
  	
  </mapper>

 

- 루트 컨텍스트 맨 마지막

<?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:jdbc="http://www.springframework.org/schema/jdbc"
	xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
	xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
		http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

	<!-- 데이터 베이스 정보는 외부 파일로 관리 -->
	<!-- classpath:/ 자바/리소스 경로를 가르킵니다 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<!-- 위에 src/main/resources를 가르킴 -->
		<property name="location" value="classpath:/DB-config/hikari.properties"></property>
	</bean>
	
	
	<!-- 데이터 베이스 연결 작업, 설정 -->
	<bean id="hikari" class = "com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="${ds.dirverClassName}"/>
		<property name="jdbcUrl" 		 value="${ds.jdbcUrl}"/>
		<property name="username" 		 value="${ds.username}"/>
		<property name="password" 		 value="${ds.password}"/>
	</bean>
	
	<!--  
	<bean id="hikari" class = "com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<property name="jdbcUrl" 		 value="jdbc:oracle:thin:@localhost:1521:xe"/>
		<property name="username" 		 value="jsp"/>
		<property name="password" 		 value="jsp"/>
	</bean>
	-->
	
	
	<!-- 데이터 베이스 정보를 주입 -->
	<bean id="ds" class="com.zaxxer.hikari.HikariDataSource">
		<constructor-arg ref="hikari"></constructor-arg>
	</bean>
	
	<!-- 마이 바티스 설정 sqlSessionFactory 생성 -->
	<bean class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 데이터 베이스 정보 전달 -->
		<property name="dataSource" ref="ds"/>
	</bean>
	
	<!-- 마이 바티스 mxl의 위치 지정, 마이 바티스 관련 어노테이션을 찾아서 설정으로 등록-->
	<mybatis-spring:scan base-package="com.simple.basic.mapper"/>

</beans>

 

- 결과 

 

마지막 결론: xml은 파일로 가고 파일은 영구적으로 됨! 

 

+ 추가적으로 testMapper.xml, testMapper.java에서 메서드 명과 id가 일치해야 합니다.

'TIL > Spring' 카테고리의 다른 글

day79-spring  (0) 2023.02.07
day78-spring  (0) 2023.02.06
day76-spring  (0) 2023.02.02
day75-spring  (1) 2023.02.01
day74-spring  (0) 2023.01.31
profile

mjeongriver

@mjeongriver

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그