spring boot에서 mybatis를 편하게 쓰기 위해, mybatis generator를 쓰곤 합니다. 이클립스에서는 쉽게 할 수 있는데요. 인텔리제이는 그렇지 않더라고요. 공식 문서를 안 읽은 댓가를 호되게 치뤘는데요. 간단하게 데이터베이스에 있는 테이블 정보를 읽어와서 어떻게 mapper, interface, model 등으로 바꾸는지 알아보도록 하겠습니다. 저는 postgreSQL을 쓸 것이니, postgreSQL Driver를 추가하였습니다. 그리고 MyBatis Framework도 추가하였습니다. 그리고 스프링 Web 디펜던시도 추가하였습니다. 이 문서를 보면, maven에서 어떻게 설정하는지 나와 있는데요. 플러그인을 추가하는 형태인가 봅니다. 요래 추가하면, plugin에 mybatis..
mybatis 검색 결과
mybatis의 xml 파일에서 '${id}' 이런 식으로 쿼리문을 작성했을 때, 단순히 append가 된다는 것은 저번에 이야기를 해 드렸습니다. 어떻게 이런 일이 일어나는지 조금 깊게 들어가 보도록 하겠습니다. 일단 id는 'or 1 = 1-- 이고, pw는 1234입니다. 이렇게 입력할 겁니다. 실험으로 쓰일 sql 문은 다음과 같이 xml 파일에 작성하였습니다. 일단, 제 Usert 클래스입니다. id, pw, num 필드가 있다는 것을 알 수 있습니다. 다음에, SqlSource를 implements한 DynamicSqlSource 클래스가 있는데요. 이 안에 getBoundSql이 있습니다. 느낌상 이 메서드가 바운드를 시킬 거 같으니, 적당한 위치에 브레이크 포인트를 걸어보겠습니다. 이 때 ..
mybatis의 sql문을 저장해 놓는 mapper 파일이 있습니다. 여기서 parameter를 $을 쓰는 거랑, #을 쓰는 것이랑 차이가 있습니다. 어떤 차이가 있는지 간단하게 알아보도록 하겠습니다. 대략적인 프로젝트 구조는 다음과 같습니다. DatabaseConfig.java는 데이터 소스를 초기화 하기 위한 클래스입니다. 그리고 속성 파일인 application.properties에 데이터 베이스 연결 정보가 들어 있습니다. /user/chk를 post 방식으로 호출을 하면 Controller의 chk를 호출합니다. 그리고 이것은 userdao의 checkId를 호출합니다. 이것은 sqlsession의 selectList를 호출하는데요. tempMapper.xml의 namespace가 com.exa..
mybatis를 이용해서 간단하게 CRUD를 하는 API를 만드는 도중에, 아래와 같은 이슈가 발생하였습니다. 왜 그랬을까요? 제 DAO 클래스 중 일부분만 보도록 하겠습니다. 제가 작성한 DAO 클래스 중 일부만 따 보겠습니다. 먼저 UserDAO의 생성자에는 위와 같은 내용이 들어가 있습니다. 다른 건 중요하지 않고, 바로 SqlSessionFactoryBuilder로 들어가 보도록 하겠습니다. 여기서 InputStream 참조 변수 하나만 받는 build 메서드를 찾아보겠습니다. 바로 이 메서드군요. 여기서 3개의 인자를 가지는 build를 찾아보겠습니다. 이 친구군요. 78번째 줄의 build를 보겠습니다. 그러면, 새로 생성된 DefaultSqlSessionFactory 객체를 참조하는 값이 리..
최근댓글