스프링부트를 공부하기 위해서 한 블로그를 참고해서 따라해보기로 했다.
사실 내가 찾은 것은 아니고 강제로 ,, 읍읍🥕🥕
시작 전에 그 전부터 내 노트북에서 하려고 하면 DB와 연결이 안되는 문제가 있었는데 뭔가 잘 못 만졌었는지 있어야하는게 없고 뭐 그런것같았다.
그래서 이것저것 찾아보며 jdk 재설치, 환경 변수 설정 등등을 다시 했다,, 아까는 모니터 부수고 싶었는데 이제 좀 진정이 됐다..🙂
패키지 구조도 블로그 내용처럼 똑같이 만들어줬다.
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
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 : 모든 필드에 대한 생성자 자동 생성
전에 수업때 쓸거면 둘 다 쓰고 아니면 안써줘도 상관없다고 한거같은데 기억이 가물가물하다
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개의 메서드를 만들어준다.
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);
}
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라는 것으로 나눠놨는데 음 ,, 전에 수업해서도 이렇게 했던가? 다시 확인해야겠다.
블로그 내용에서는 MySQL 모니터를 사용해서 데이터베이스를 생성하는데 Workbench라는것을 써보고 싶어서 사용해보기로 했다.
MySQL Workbench에서 데이터베이스를 생성해준다.
apply눌러서 저장해주고 모니터로 확인해보기로 했다.
mysql 로그인
예쁘게 잘 들어가있군.
이제 다시 스프링부트로 넘어가서 데이터베이스 이름과 시간설정을 추가해줘야한다.
그리고 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>
지금은 다 까먹음요... from 원글작성자