본문 바로가기
👨‍💻 2. 웹개발_Back end/2-7 Spring Boot

[SpringBoot] 2장 스프링 부트를 이용한 게시판 만들기 실습 - 글 등록, 수정, 삭제, 첨부 파일 업로드

by 달님🌙 2021. 11. 5.
반응형

 

실습 코드 참조

 

moonhy7/SpringBoot: SpringBoot 실습 코드 정리 (github.com)

 

GitHub - moonhy7/SpringBoot: SpringBoot 실습 코드 정리

SpringBoot 실습 코드 정리. Contribute to moonhy7/SpringBoot development by creating an account on GitHub.

github.com

 

 

1. DB 연동

 

1. Hikari 연동

 

- 스프링프레임워크는 설정파일로 boot는 자바 파일로 한다는 차이점

 

- 스프링에서는 applicationContext.xml 에서 Bean 객체를 등록했지만

- 스프링부트에서는 클래스를 이용한다는 차이점이 존재

- DataSourceConfiguration

package com.springbook.configuration;

import javax.sql.DataSource;

import org.springframework.boot.context.properties.ConfigurationProperties;
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.properties")
public class DataSourceConfiguration {
	@Bean
	@ConfigurationProperties(prefix="springbook.datasource.hikari")
	public HikariConfig hikariConfig() {
		return new  HikariConfig();
	}
	
	@Bean
	public DataSource dataSource() throws Exception {
		DataSource dataSource = new HikariDataSource(hikariConfig());
		return dataSource;
	}
}

 

2. Mybatis 연동

 

- applicationContext.properties

mybatis.configuration.map-underscore-to-camel-case=true

 

- DataSourceConfiguration

package com.springbook.configuration;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
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.properties")
public class DataSourceConfiguration {
	@Autowired
	private ApplicationContext applicationContext;
	
	@Bean
	@ConfigurationProperties(prefix="springbook.datasource.hikari")
	public HikariConfig hikariConfig() {
		return new  HikariConfig();
	}
	
	@Bean
	public DataSource dataSource() throws Exception {
		DataSource dataSource = new HikariDataSource(hikariConfig());
		return dataSource;
	}
	
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
		SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
		sqlSessionFactoryBean.setDataSource(dataSource);
		sqlSessionFactoryBean.setMapperLocations(applicationContext
				.getResource("classpath:/mapper/**/*-mapping.xml"));
		return sqlSessionFactoryBean.getObject();
	}
	
	public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
		return new SqlSessionTemplate(sqlSessionFactory);
	}
}

 

 

2. JSP 파일 가져와서 수정

 

1. applicationContext.properties

 

- prefix와 suffix 설정

spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
#spring datasource.hikari.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/studydb?serverTimezone=UTC
#spring.datasource.hikari.jdbc-url=jdbc:oracle:thin@localhost:1524:xe
spring.datasource.hikari.username=study
spring.datasource.hikari.password=study
spring.datasource.hikari.connection-test-query=SELECT 1 FROM DUAL

mybatis.configuration.map-underscore-to-camel-case=true

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

 

2. 스프링 프레임워크에서 파일 가져오기

 

1)  js 폴더와 jsp 파일들 복사해오기

 

2) jsp 파일 더블클릭 >  js 파일 경로 수정 (../ 붙이기)

+ 다국어 처리 지우기

 

3) 메모장으로 열리는 경우 vs code로 열리도록 설정

 

 

 

3. 매핑해주기

 

1. VO 복사해오기

 

- BoardVO 

package com.springbook.vo;

import java.sql.Date;

import org.springframework.web.multipart.MultipartFile;

import com.fasterxml.jackson.annotation.JsonIgnore;

public class BoardVO {
	private int seq;
	private String title;
	private String writer;
	private String content;
	private Date regDate;
	private int cnt;
	private String SearchCondition;
	private String SearchKeyword;
	private MultipartFile uploadFile;
	
}

 

- BoardFileVO

package com.springbook.vo;

public class BoardFileVO {
	private int seq;
	private int fSeq;
	private String originalFileName;
	private String filePath;
	private long fileSize;
}

 

 

2. lombok 설치 

 

- 구글 > lombok 검색 > 설치

 

- 더블 클릭으로 실행이 안될 시 cmd창으로 실행

 

- Specify location으로 sts-4 지정 후 Install / Udate > Quit Installer

 

- Getter, Setter 일일이 써줄 필요가 없어짐 

 

3. 스프링 프레임워크에서 아래 파일들 가져와서 수정

 

- 먼저 부트에서 각 패키지 생성하고 그 다음 스프링프레임워크에서 파일 복사해서 붙여넣기

- 클래스 내 import 부분 패키지명 변경

- board-mapping.xml 에 타입 명 변경

- 이제 DAO는 필요없음 (mapper 인터페이스만들고 그것을 상속받은 sql매퍼를 만들어서 거기서 dao 역할 해줌)

 

5. 실행 결과

 

 

 

 

4. 첨부파일 업로드

 

1. 최신 버전 확인

 

Maven Repository: Search/Browse/Explore (mvnrepository.com)

 

 

 

2. common 파일 설치

 

 

3. Refresh

 

- gradle 파일 수정 후 습관적으로 해주기

 

4. MvcConfiguration

 

package com.springbook.configuration;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfiguration implements WebMvcConfigurer {
	@Bean
	public CommonsMultipartResolver multipartResolver() {
		CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
		
		multipartResolver.setDefaultEncoding("UTF-8");
		multipartResolver.setMaxUploadSizePerFile(100 * 1024 * 1024);
		return multipartResolver;
	}
}

 

 

5. mybatis-config.xml

 

<?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="callSettersOnNulls" value="true"/>
		<setting name="jdbcTypeForNull" value="NULL"/>
	</settings>
</configuration>

 

 

6. BoardServiceImpl

 

package com.springbook.impl;

public class BoardServiceImpl implements BoardService{

	public void insertBoardFileList(List<BoardFileVO> fileList) {
		for(BoardFileVO vo : fileList) {
			boardMapper.insertBoardFileList(fileList);
		}		
	}

 

 

 

 

반응형

댓글