이후 데이터베이스에 테이블을 생성하는 방법을 찾아보고 있는데 jpa를 사용하다 보니 엔티티 클래스에 에너테이션을 달아서 자동으로 테이블을 생성하는 방식에만 익숙하다보니 그와 비슷한 내용을 구글링을 통해 찾고 있었다.
하지만 원하는 정보는 찾을 수가 없었고 xml파일에 sql문을 이용해 mapper를 사용하는 방식만이 나왔다.
그러다가 공식문서와 구글링을 통해서 알아낸 것이 mybatis는 자동으로 테이블을 생성하는 것이 아니라 데이터베이스에 직접 테이블을 생성해주는 방식이었다..ㅋㅋ
이 외에도 엔티티 클래스를 생성하고 resultmap이라는 명령어를 사용해서 직접 객체를 영속화 시켜주는 방법이 있었지만 해당 방법은 복잡한 테이블 설계가 이루어졌을 때 직접 지정해주는 방식이 있는 것 같긴 했지만 이것을 사용할 필요는 없어보이고
MySQL을 사용해 데이터베이스를 연동하고 테이블을 직접 생성해주었다..
그리고 굳이 엔티티 클래스를 사용하지 않고 DTO를 이용해 계층간 이동할 때만 데이터를 담아주면 되며 xml파일을 이용해서 mapper에 필요한 sql문을 작성해주면 된다.
일단 나는 xml파일 위치를 resources 하위에 mapper 디렉토리를 만들어서 사용을 했기 때문에 yml파일에 해당 경로를 입력해줬다.
mybatis:
mapper-locations: mapper/*.xml
그리고 해당 경로에 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.reading.lib.domain.user.mapper.UserMapper"> //mapper 파일 경로 입력
<select id="findByUserData" parameterType="String" resultType="MemberDTO">
SELECT *
FROM user
WHERE userId = #{userData} or email = #{userData} or nickname = #{userData}
</select>
</mapper>
Mapper와 DTO에는 해당 코드를 입력해줬다.
@Mapper
public interface UserMapper {
MemberDTO findByUserData(String userData);
}
@Data
@AllArgsConstructor
public class MemberDTO {
private String userId;
private String email;
private String nickname;
private LocalDateTime create_at;
}