Spring boot 연습
스프링부트를 공부하기 위해서 한 블로그를 참고해서 따라해보기로 했다.
사실 내가 찾은 것은 아니고 강제로 ,, 읍읍🥕🥕
시작 전에 그 전부터 내 노트북에서 하려고 하면 DB와 연결이 안되는 문제가 있었는데 뭔가 잘 못 만졌었는지 있어야하는게 없고 뭐 그런것같았다.
그래서 이것저것 찾아보며 jdk 재설치, 환경 변수 설정 등등을 다시 했다,, 아까는 모니터 부수고 싶었는데 이제 좀 진정이 됐다..🙂
프로젝트 생성
Dependencies
- Spring web - 스프링 기본 웹 프로젝트에 필요한 라이브러리 제공
- Spring boot DevTools - 코드를 수정하고 저장시 자동으로 서버를 재실행 시켜줌
- Lombok - @data 어노테이션 사용 (setter, getter 자동 생성)
- MySQL Driver- MySQL DBMS 이용하기 때문에 선택해줌
- Mybatis Framework - MySQL과의 작업을 손쉽게 하도록 지원해주는 라이브러리
- Thymeleaf
패키지 구조도 블로그 내용처럼 똑같이 만들어줬다.
application.properties
MyBatis와 MySQL의 연동작업을 하는 코드 입력
#MySQL 설정
spring.datasource.url=jdbc:mysql://localhost:3306/
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=
#MyBatis 설정
mybatis.mapper-locations=classpath*:mapper/*.xml
username과 password는 본인의 계정과 비밀번호 입력
보통 MySQL 포트번호는 3306
VO, Mapper 작성
게시판에 필요한 객체 생성
package com.example.demo.bean;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FileBoardVO {
private int b_no; // 게시글 고유번호
private String title; // 제목
private String content; // 내용
private String writer; // 작성자
private Date reg_date; // 작성일자
}
package com.example.demo.bean;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FileBoardVO {
private int b_no; // 게시글 고유번호
private String title; // 제목
private String content; // 내용
private String writer; // 작성자
private Date reg_date; // 작성일자
}
@Data 어노테이션 붙여준다.(Lombok)
@NoArgsConstructor : 파라미터가 없는 생성자 생성
@AllArgsConstructor : 모든 필드에 대한 생성자 자동 생성
전에 수업때 쓸거면 둘 다 쓰고 아니면 안써줘도 상관없다고 한거같은데 기억이 가물가물하다
Mapper
package com.example.demo.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.example.demo.bean.FileBoardVO;
@Mapper
public interface FileBoardMapper {
List<FileBoardVO> getFileBoardList(); // 게시글 리스트 출력
FileBoardVO fileBoardDetail(int b_no); // 게시글 세부 내용 보기
int fileBoardInsert(FileBoardVO fileBoard); // 게시글 생성
int fileBoardUpdate(FileBoardVO fileBoard); // 게시글 수정
int fileBoardDelete(int bno); // 게시글 삭제
}
@Mapper 어노테이션을 이용해 Mapper임을 알려준다.
리스트 출력, 내용 보기, 게시글 등록, 수정, 삭제에 필요한 5개의 메서드를 만들어준다.
Service
package com.example.demo.service;
import java.util.List;
import com.example.demo.bean.FileBoardVO;
public interface FileBoardService {
List<FileBoardVO> getFileBoardList();
FileBoardVO fileBoardDetail(int b_no);
int fileBoardInsert(FileBoardVO fileBoard);
int fileBoardUpdate(FileBoardVO fileBoard);
int fileBoardDelete(int bno);
}
Service Implement
package com.example.demo.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.bean.FileBoardVO;
import com.example.demo.mapper.FileBoardMapper;
@Service
public class FileBoardServiceImpl implements FileBoardService{
@Autowired
FileBoardMapper fileboardmapper;
@Override
public List<FileBoardVO> getFileBoardList() {
return fileboardmapper.getFileBoardList();
}
@Override
FileBoardVO fileBoardDetail(int b_no) {
return fileboardmapper.fileBoardDetail(b_no);
}
@Override
int fileBoardInsert(FileBoardVO fileBoard) {
return fileboardmapper.fileBoardInsert(fileBoard);
}
@Override
int fileBoardUpdate(FileBoardVO fileBoard) {
return fileboardmapper.fileBoardUpdate(fileBoard);
}
@Override
int fileBoardDelete(int bno) {
return fileboardmapper.fileBoardDelete(bno);
}
}
이 블로그에서 Service와 Service Implement라는 것으로 나눠놨는데 음 ,, 전에 수업해서도 이렇게 했던가? 다시 확인해야겠다.
database 생성
블로그 내용에서는 MySQL 모니터를 사용해서 데이터베이스를 생성하는데 Workbench라는것을 써보고 싶어서 사용해보기로 했다.
MySQL Workbench에서 데이터베이스를 생성해준다.
apply눌러서 저장해주고 모니터로 확인해보기로 했다.
mysql 로그인
예쁘게 잘 들어가있군.
이제 다시 스프링부트로 넘어가서 데이터베이스 이름과 시간설정을 추가해줘야한다.
xml
그리고 xml파일을 만들어서 쿼리문을 입력해준다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTDMapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.FileBoardMapper">
<select id="getFileBoardList" resultType="com.example.demo.bean.FileBoardVO">
SELECT * FROM file_board
ORDER BY b_no
</select>
<select id="fileBoardDetail" parameterType="int" resultType="com.example.demo.bean.FileBoardVO">
SELECT * FROM file_board
WHERE b_no=#{b_no}
</select>
<insert id="fileBoardInsert" parameterType="com.example.demo.bean.FileBoardVO" keyProperty="b_no">
INSERT INTO file_board(title, content, writer)
VALUES(#{title}, #{content}, #{writer})
</insert>
<update id="fileBoardUpdate" parameterType="com.example.demo.bean.FileBoardVO">
UPDATE file_board SET
<if test="title != null">title=#{title}</if>
<if test="title != null and content != null">,</if>
<if test="content != null">content=#{content}</if>
WHERE b_no=#{b_no}
</update>
<delete id="fileBoardDelete" parameterType="int">
DELETE FROM file_board WHERE b_no=#{b_no}
</delete>
</mapper>
- xml 쿼리문에서 if라고 써진 것이 어떤 의미인지 찾아볼 것
- Service - Service Implement
- Lombok 어노테이션
Author And Source
이 문제에 관하여(Spring boot 연습), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ayleen9506/Spring-boot-연습저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)