본문 바로가기
[ Programming ] Project/Fileboard with Thymeleaf

[스프링부트, 타임리프(Thymeleaf)로 파일게시판 만들기] #4 MySQL에서 Database 및 xml형식 Mapper 작성 (4/n)

by the_little_coder 2020. 3. 25.

스프링부트, 타임리프(Thymeleaf)로 파일게시판 만들기

#4 MySQL에서 Database 및 xml형식 Mapper 작성



이번에는 MySQL에서 Database와 Table을 생성하고 xml형식의 Mapper파일을 작성하겠습니다.



Database 생성


---(맥 사용자만)---


맥 사용자라면 MySQL서버를 작동시켜야 합니다. 저는 터미널에서 다음 명령어로 작동시키겠습니다.


Corini$ mysql.server start


입력하면 아래와 같이 정상적으로 진행됩니다.




Corini$ mysql.server start

Starting MySQL

. SUCCESS! 

Corini$ 



---(끄읏)---


이제 다음 명령어로 여러분이 작업하고자 할 MySQL 계정으로 접속합니다. 저는 root계정으로 사용하며, 비밀번호가 없기에 바로 진행했습니다.


Corini$ mysql -u root -p [비밀번호입력]




Corini$ mysql -u root -p

Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 8

Server version: 8.0.18 Homebrew


Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> 




MySQL 계정과 비밀번호를 틀리지 않고 잘 입력했다면 명령줄이  mysql>  로 바뀌면서 접속이 된 것을 확인할 수 있습니다. 이제 Database를 작성하겠습니다.


mysql> CREATE DATABASE thymeleaf_test DEFAULT CHARACTER SET UTF8;


입력이 성공했다면, 잘 입력이 되어있는지 조회해봅시다.


mysql> show databases;




mysql> CREATE DATABASE thymeleaf_test DEFAULT CHARACTER SET UTF8

    -> ;

Query OK, 1 row affected, 1 warning (0.00 sec)


mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| sys                |

| test_crud          |

| testdb             |

| thymeleaf_crud     |

| thymeleaf_test     |

+--------------------+

8 rows in set (0.00 sec)


mysql> 




이제 저는 thymeleaf_test 데이터베이스에 들어가서 테이블을 생성할겁니다. 데이터베이스 선택 명령어를 입력합니다.




mysql> use thymeleaf_test;

Database changed




이제 thymeleaf_test 데이터베이스로 작업실(?)을 옮겼습니다. 이전에 FileBoardVO.java 작성했던거 기억하시나요? 이 객체의 변수명과 동일하게 테이블 컬럼을 작성합니다. 오타에 주의하세요.




mysql> create table file_board(

    ->  b_no int primary key auto_increment,

    ->  title varchar(200),

    ->  content varchar(1000),

    ->  writer varchar(20),

    ->  reg_date datetime default current_timestamp

    -> );

Query OK, 0 rows affected (0.01 sec)




그리고 테이블 상세정보를 확인해봅니다.


mysql> desc file_board;




mysql> desc file_board;

+----------+---------------+------+-----+-------------------+-------------------+

| Field    | Type          | Null | Key | Default           | Extra             |

+----------+---------------+------+-----+-------------------+-------------------+

| b_no     | int(11)       | NO   | PRI | NULL              | auto_increment    |

| title    | varchar(200)  | YES  |     | NULL              |                   |

| content  | varchar(1000) | YES  |     | NULL              |                   |

| writer   | varchar(20)   | YES  |     | NULL              |                   |

| reg_date | datetime      | YES  |     | CURRENT_TIMESTAMP | DEFAULT_GENERATED |

+----------+---------------+------+-----+-------------------+-------------------+

5 rows in set (0.00 sec)


mysql> 




이제 Database 작업은 다 끝난 것 같죠? 는 아닙니다. 프로젝트 패키지에서 application.properties 파일에서 spring.datasource.url을 수정해줘야 합니다. 데이터베이스에 접속해야 하니 데이터베이스명을 추가해주어야 합니다. 그리고 시간설정도 추가로 작성합니다.



application.properties


#MySQL 설정
spring.datasource.url=jdbc:mysql://localhost:3306/thymeleaf_test?serverTimezone=Asia/Seoul
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=

#MyBatis 설정
mybatis.mapper-locations=classpath*:mapper/*.xml




MyBatis 작업


이제 쿼리문을 대신 실행해 줄 MyBatis작업을 하겠습니다. resources/mapper/에서 FileBoardMapper.xml파일을 생성합니다. 그리고 다음과 같이 작성합니다.



FileBoardMapper.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>



여기까지 잘 따라오셨나요? 오늘 작성한 파일의 패키지 구조를 확인하며, 이번 글은 여기서 마무리하겠습니다.







댓글