spring boot에서 mybatis를 편하게 쓰기 위해, mybatis generator를 쓰곤 합니다. 이클립스에서는 쉽게 할 수 있는데요. 인텔리제이는 그렇지 않더라고요. 공식 문서를 안 읽은 댓가를 호되게 치뤘는데요. 간단하게 데이터베이스에 있는 테이블 정보를 읽어와서 어떻게 mapper, interface, model 등으로 바꾸는지 알아보도록 하겠습니다.
저는 postgreSQL을 쓸 것이니, postgreSQL Driver를 추가하였습니다. 그리고 MyBatis Framework도 추가하였습니다. 그리고 스프링 Web 디펜던시도 추가하였습니다. 이 문서를 보면, maven에서 어떻게 설정하는지 나와 있는데요. 플러그인을 추가하는 형태인가 봅니다.
요래 추가하면, plugin에 mybatis-generator가 추가됩니다.
추가가 되었으니, 이제 프로젝트의 루트에서 mvn mybatis-generator:generate -X를 입력해 보겠습니다. -X는 상세하게 로그를 찍어주는 옵션입니다.
뭔가 명령은 잘 먹히는 거 같네요.
그런데, 이것을 쓰기 위해서는 resources 폴더에 generatorConfig.xml이 있어야 하는 모양입니다. 제가 가져올 테이블은 book이니까, 이 문서를 참고해서 작성해 보겠습니다.
다른 점은 딱히 없어 보입니다. 확인해야 할 부분은 driverClass인데요. postgresql은 org.postgresql.Driver였습니다. 외부 라이브러리를 뒤져보면 어렵지 않게 적으실 수 있을 겁니다.
이 부분까지 수행했을 때 프로젝트에는 위와 같이 들어가 있어야 합니다.
다시 mvn mybatis-generator:generate -X를 입력해 봅시다.
그러면 이번에는 org.postgresql.Driver를 찾을 수 없다고 뜹니다. 어떻게 된 걸까요? 확인을 위해서 간단하게 도서관 api 프로젝트의 메인 클래스인, LibrarytestApplication에, class.forName("org.postgresql.Driver") 구문을 넣어보도록 하겠습니다. 이것은 문서에 따르면, 로더가 해당 클래스를 로드했는지를 알려줍니다. 찾을 수 없다면 classNotFoundException이 뜰 겁니다.
만약에 로드가 안 되었다면 Exception에 걸려서 예외를 출력할 겁니다.
결과는 예외를 출력하지 않고, org.postgresql.Driver를 출력하였습니다. 이는 처음에 maven 디펜던시에서 postgresql을 추가했기 때문입니다. 그런데 왜 generator를 돌리면 이 클래스를 못 찾는다고 뜰까요? 이에 대한 것은 이 문서의 Classpath Issues에 있습니다. 플러그인의 classpath가 매우 제한적이기 때문에, 외부 라이브러리를 인식 하지 못한 셈입니다.
해당 문서에서는, 해결 방안으로 디펜던시를 plugin 안에 추가하는 방법을 제시하고 있습니다. 예제도 나와 있으니, 그렇게 해 보겠습니다.
저는, mybatis-generator-maven-plugin에 org.postgresql 의존성을 추가했습니다.
그랬더니 이번에는 version이 없다고 에러가 뜹니다. 버전을 추가해 주어야 겠습니다.
외부 의존성 카데고리에 있는 것들을 보니, postgresql:42.2.23이 눈에 들어오는군요. 이게 버전인 것으로 보입니다.
버전 정보가 42.2.23이라는 정보를 추가해 준 다음에 프로젝트의 루트 폴더로 가서 mvn mybatis-generator:generate -X 를 입력해 봅시다.
그러면 성공적으로 Build를 마칠 수 있게 됩니다. 교과서에 답이 다 있었네요.
이제 프로젝트에는 위와 같이 Mapper, Model, Mapper xml 파일이 떨어지게 됩니다. 다음에는, 적당히 Datasoruce 등을 가지고 접속 정보를 잘 떨궈서 CRUD 연산을 잘 구현해 보도록 하겠습니다.
'웹 > 스프링부트' 카테고리의 다른 글
mybatis trim 태그를 prefixoverrides를 이용해서 잘 써먹어 봅시다. (2) | 2021.07.28 |
---|---|
mybatis mapper location 설정을 쉽고 빠르게 해 봅시다. (0) | 2021.07.26 |
bcrypt는 salt가 매번 달라지는데 어떻게 match 판단을 그리 잘 할까요? (4) | 2021.07.16 |
스프링 시큐리티 인증 정보를 postman으로 보내 봅시다. (0) | 2021.07.15 |
spring boot logging.level로 일정 레벨 이상의 로그만 출력해 봅시다. (0) | 2021.07.05 |
최근댓글