/ SPRING BOOT, SPRING

스프링부트초기설정

스프링 목록

스프링 부트 목록



스프링 부트 초기 설정에 관한 내용입니다.

이클립스 설정



1. UTF-8 언어 설정

(Window -> Preferences 클릭 )

  1. workspace - 인코딩설정 utf-8
  2. Java- Compiler-> (Compiler Compilance level1.8버전
  3. Java- Installed JREs -> Add -> Standard VM ->(\jdk1.8.0_301)
  4. Web-> css, html, jsp 인코딩 utf-8로 설정
  5. Genteral->Content Typer -> Text 펼치기 ->java Properties File 펼치기-> Spring Propertis File -> UTF-8 치고 업데이트 (스프링은 설정파일이 xml이 아니라 properties에서 사용 )






Spring Boot 설정



1. 실제 프로젝트 만들어주기

  1. 프로젝트 생성 -> new ->others.. -> spring boot-> Spring Starter Project
    • Packaging : War
    • java Version : 8
    • Bootversion (5.2.8)
    • Package : com.my (이 경로 기억할것)
      • (중요! 여기가 스프링 자동으로 스캔해주는 패키지 경로)
    • Selectd -> Spring Web 추가
    • Selectd -> Oracle driver 추가
    • Selectd -> JDBC API 추가
    • Selectd -> Mybatis FrameWork 추가
    • Selectd -> Spring Boot DevTools 추가




A. form.xml 추가


    <!-- JDBC용 Log4J-->
		<dependency>
			<groupId>org.bgee.log4jdbc-log4j2</groupId>
			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
			<version>1.16</version>
		</dependency>
    <!-- jsp라이브러리 -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
		</dependency>




B. application.yml 작성

application.properties -> 우클릭 ->Convert properties to .yml (들여쓰기 주의해서 할것)

#서버 설정
server:
  port: 9998
  servlet:
    context-path: /demo
#스프링 설정
spring:
  datasource:
    hikari:
      driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
      jdbc-url: jdbc:log4jdbc:oracle:thin:@localhost:1521:xe
      username: hr
      password: hr
      maximum-pool-size: 10
      minimum-idle: 2

#맵리졸버 용 프리픽스
  mvc:
    view:
      prefix: /WEB-INF/views/


#스프링 부트 로그레벨 TRACE < DEBUG < INFO < WARN < ERROR
logging:
  level:
    root: info

  • 맵 리졸버 prefix, suffix 사용시 @RequestMapper 사용시 String, void 리턴할때 자동으로 리턴값에 경로 붙여줌





2. Mybatis 설정 파일 추가




A. mybatis-config.xml 추가

(src/main/resources/mybatisConfig/mybatis-config.xml) 없는 폴더는 생성

기본 패키지 바뀔시 tpye = "com.my.~~~"이런식으로 반드시 수정할것

<?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>
	<settings>
		<!-- 언더스코어를 자동으로 카멜케이스로 매핑해주는 기능 -->
		<setting name="mapUnderscoreToCamelCase" value="true"/>
		<setting name="jdbcTypeForNull" value="NULL"/>
	</settings>

	<typeAliases>
		<!-- 프로덕트vo 경로 매번 설정하기 귀찮을떈 Alias 생성 -->
 		<typeAlias type="com.my.product.vo.Product" alias="Product"/>
		<typeAlias type="com.my.customer.vo.Customer" alias="Customer"/>
		<typeAlias type="com.my.order.vo.OrderInfo" alias="OrderInfo"/>
		<typeAlias type="com.my.order.vo.OrderLine" alias="OrderLine"/> 
	</typeAliases>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
        <property name="username" value="hr"/>
        <property name="password" value="hr"/>
      </dataSource>
    </environment>
  </environments>

  <mappers>
    <mapper resource="mybatisConfig/ProductMapper.xml"/>
    <mapper resource="mybatisConfig/CustomerMapper.xml"/>
    <mapper resource="mybatisConfig/OrderMapper.xml"/>
  </mappers>
</configuration>



B. ProductMapper.xml 추가

(src/main/resources/mybatisConfig/ProductMapper.xml)

기본 패키지 바뀔시 namespace = "com.my.xxx" 이런식으로 반드시 수정할것

<?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="com.my.product.ProductMapper"> 
  <select id="findAll" resultType="Product">
  	SELECT * FROM product ORDER BY prod_name ASC
  </select>

  <select id="findByNo" parameterType="string" 
				  resultType="Product">
	SELECT * FROM product WHERE prod_no= #{prodNo}
  </select>
</mapper>






C. DatabaseConfiguration.java 추가

(src/main/java/com/my/config/DatabaseConfiguration.java)

해당 내용은 mybatis-config.xml 에 자동으로 추가됨

이런식으로 만들면 config.xml 파일에 모든 정보를 안 넣어도 됨

package com.example.demo.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

@Configuration
@PropertySource("classpath:/application.yml")


//히카리 cp 설정부분
public class DatabaseConfiguration {

	@Bean
	
	//이 프로퍼티를 이용해서 히카리 콘피그 객체를 생성
	@ConfigurationProperties(prefix="spring.datasource.hikari")
	public HikariConfig hikariConfig() {
		return new HikariConfig();
	}

	@Bean	
	public DataSource dataSource() throws Exception {
		DataSource dataSource = new HikariDataSource(hikariConfig());
		System.out.println(dataSource.toString());
		return dataSource;
	}
	
	@Autowired
	private ApplicationContext applicationContext;
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);

    //이부분이 mabatis-config.xml 에 추가해주는 부분
		sqlSessionFactoryBean.setConfigLocation(applicationContext.getResource("classpath:/mybatisConfig/mybatis-config.xml"));
		return sqlSessionFactoryBean.getObject();
	}


}




D. DAO ,Vo, Controller 파일 알아서 각자 추가

기본 패키지 바뀔시 모든 파일들의 “com.my.xxx” 형식으로 수정할것

  • ex) com.example.demo
  • ex) com.my




4. 단위 테스트

src/test/java 에 스프링이 자동 스캔 해주는 패키지에 넣기

  • ex) com.example.demo.dao
  • ex) com.my.dao

ProductDAOOracleTest.java

package com.my.dao;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;

import java.util.List;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;

import com.my.exception.FindException;
import com.my.product.dao.ProductDAOInterface;
import com.my.product.vo.Product;


@SpringBootTest
public class ProductDAOOracleTest {

	@Autowired
	@Qualifier("pDAO")
	private ProductDAOInterface dao;

	@Test
	public void testFindByNo() throws FindException {
		String prod_no = "C0001";
		Product p = dao.findByNo(prod_no); //DB검색결과

		String expectedProdName = "아메리카노";//예상
		int expectedProdPrice = 1000;
		
		assertEquals(expectedProdName, p.getprodName());
		assertTrue(expectedProdPrice == p.getprodPrice());
	}

	@Test
	public void testFindAll() throws FindException {
		System.out.println("testSelectAll메서드호출");
		List<Product>list = dao.findAll();
		int expectedSize = 10; //예상
		assertTrue(expectedSize == list.size());
	}	


}

스프링 목록

스프링 부트 목록