아무튼 개발
article thumbnail
반응형

 

 

 

스프링 부트는 스프링 프레임워크에 비해 환경설정이 훨씬 간편해졌다.

STS 3.9 버전 이후부터는 톰캣 서버가 내장되어 있기 때문에 서버를 일일이 시작하지 않아도 되며, 라이브러리 등의 많은 부분에서 자동화가 되었다. 사용자가 편리하게 코딩할 수 있는 환경이 만들어진 것이다.

 

 

또한 주로 JSP파일을 사용하지 않고 HTML파일을 사용하여 클라이언트에게 화면을 뿌려준다.

DB 연결부터 데이터를 주고 받는 것과, html 연결까지

아래의 코딩을 보며 확인해보겠다!

 

 

application.properties

server.port=8080

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@IP번호:1521:xe
spring.datasource.username=사용자정의
spring.datasource.password=사용자정의

spring.thymeleaf.cache=false

mybatis.type-aliases-package=com.spring.boot.mapper

mybatis.mapper-locations=/mybatis/mapper/*.xml

 

먼저 환경설정 파일이다.

여러 종류의 셋팅을 입력해보았다. 문단별로 순서대로 설명하겠다.

 

1) 포트번호 8080은 디폴트이며 다른 번호로 지정할 수 있다.

2) datasource는 DB 연결을 위해 입력하였다. 기존에 입력해왔던 dataSource 내용과 거의 동일하다.

3) thymeleaf 캐쉬 설정을 함으로써 자동으로 지워지도록 한다.

4) 입력할 내용이 긴 경우, 생략하여 반복을 줄인다. 효율성이 더 높아진다.

5) xml의 위치 정보를 기록하기 위해 입력해주었다. xml로 끝나는 파일은 모두 해당된다는 의미이다.

 

 

SpringBootBoardApplication.java

@SpringBootApplication
public class SpringBootBoardApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootBoardApplication.class, args);
	}
	
	@Bean
	public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
		
		SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		sessionFactory.setDataSource(dataSource);
		
		Resource[] res = new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/*.xml");																				
		sessionFactory.setMapperLocations(res);
		
		return sessionFactory.getObject();
	}
}

 

SqlSessionFactory의 객체를 생성하여 DataSource를 의존성 주입해준다.

또한 Resource에 sql을 입력한 xml 파일의 위치 정보를 입력해줄 것이며, 파일이 여러개일 때에는 [] 배열로 입력해준다. getResources에는 패키지명과 파일명을 입력해주며, 여러 파일을 설정하기 위해선 mybatis/../*.xml로 입력해주면 된다.

res는 setMapperLocations에 담으며 이는 기존의 configLocation 기능과 같다.

이렇게 해서 sessionFactory가 완성되며, return값은 DB 연결 객체를 오브젝트로 반환한다.

 

 

boardMapper.xml

<?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.spring.boot.mapper.BoardMapper">

<select id="maxNum" resultType="int">
	select nvl(max(num),0) from board
</select>

<insert id="insertData" parameterType="com.spring.boot.dto.BoardDTO">
	insert into board (num,name,pwd,email,subject,content,ipAddr,hitCount,created)
	values (#{num},#{name},#{pwd},#{email},#{subject},#{content},#{ipAddr},0,sysdate)
</insert>
</mapper>

 

위에서 지정했던 xml 파일이다. SQL문을 입력하여 DB에 들어가도록 한다.

<!DOCTYPE> 태그는 mapper로 xml을 사용하기 위해서 꼭 입력해줘야 하는 부분이다.

 

namespace는 자유로운 사용자 지정이었다면, 이제는 실제 연동할 해당 패키지명과 인터페이스명을 입력해야 한다.

밑에는 그동안 입력한 것처럼 사용할 sql문을 입력해주면 된다.

 

 

BoardMapper.java

@Mapper
public interface BoardMapper {
	
	public int maxNum() throws Exception;		
	public void insertData(BoardDTO dto) throws Exception;
}

 

xml파일의 내용을 가져오기 위해 @Mapper 어노테이션을 입력해준다.

하단의 2개 메소드명은 sql문의 id와 일치해야 연동되어 가져올 수 있다.

 

 

BoardService.java

public interface BoardService {
	
	public int maxNum() throws Exception;	
	public void insertData(BoardDTO dto) throws Exception;
}

 

위에 입력해준 메소드를 똑같이 복사한 서비스 인터페이스 파일이다.

의존성을 위한 파일 분리 작업이다.

 

 

BoardServiceImpl.java

@Service
public class BoardServiceImpl implements BoardService{

	@Autowired
	private BoardMapper boardMapper;

	@Override
	public int maxNum() throws Exception {
		return boardMapper.maxNum();
	}

	@Override
	public void insertData(BoardDTO dto) throws Exception {
		boardMapper.insertData(dto);
	}
}

 

위의 인터페이스 파일을 상속해준 클래스이다.

사용하기 위해 먼저 @Service 어노테이션을 통해 객체 생성을 해준다.

 

BoardMapper를 의존성 주입해줌으로써 sql문을 읽어오도록 한다.

BoardService를 상속했기 때문에 오버라이딩하여 메소드를 가져오고

BoardMapper의 sql문을 입력해주면 된다.

 

 

BoardController

@RestController
public class BoardController {
	
	@Resource
	private BoardService boardService;
	
	@RequestMapping(value = "/created.action",method = {RequestMethod.POST})
	public ModelAndView created_ok(BoardDTO dto, HttpServletRequest request) throws Exception{
		
		ModelAndView mav = new ModelAndView();
		
		int maxNum = boardService.maxNum();
		
		dto.setNum(maxNum + 1);
		dto.setIpAddr(request.getRemoteAddr());
		
		boardService.insertData(dto);
		
		mav.setViewName("redirect:/list.action");
		
		return mav;
	}

 

입력한 내용들은 실제로 클라이언트에게 받아 넣을 수 있도록 컨트롤러를 만들었으며, 간단하게 사용 예제를 확인해보겠다.

 

컨트롤러는 @RestController를 어노테이션해준다. 기존의 @Controller는 사용하지 않는다.

sql문을 가져오기 위해 @Resource 어노테이션을 통해 BoardService를 의존성 주입한다.

그러면 BoardService안의 BoardServiceImpl도 같이 딸려오게 된다.

 

스프링 부트에서는 무조건 ModelAndView를 사용하여 데이터와 경로를 함께 보내도록 한다.

html파일에서 사용자가 입력한 값을 매개변수(dto)로 받는다.

boardService를 통해 sql문을 사용하며

 

경로를 넘기기 위해 setViewName에 입력해준다.

insert이므로 redirect로 입력해주었다.

 

 

created.html

<body>

<div class="bbsCreated_bottomLine">
    <dl>
        <dt>작성자</dt>
        <dd>
        <input type="text" name="name" size="35" 
        maxlength="20" class="boxTF"/>
        </dd>
    </dl>		
</div>

</body>

 

created.html은 기존의 jsp파일과 같으며 간단하게 입력창 부분 내용만 가져왔다.

input창을 통해 클라이언트에게 값을 입력받으면 된다.

 

 


 

이렇게 해서 스프링 부트를 사용하기 위한 환경설정과

DB 연동 및 데이터를 주고 받는 코딩을 살펴보았다.

 

 

3월 30일 수업 🌕

저장안해서 글 쓰다가 중간에 날라갔다. 슬프지만 다시 쓴 게시글이다 ^ㅠ^ (저장은 똑바로..)

반응형
profile

아무튼 개발

@릴쥬

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

profile on loading

Loading...