mybatis의 xml 파일에서 '${id}' 이런 식으로 쿼리문을 작성했을 때, 단순히 append가 된다는 것은 저번에 이야기를 해 드렸습니다. 어떻게 이런 일이 일어나는지 조금 깊게 들어가 보도록 하겠습니다. 일단 id는 'or 1 = 1-- 이고, pw는 1234입니다. 이렇게 입력할 겁니다. 실험으로 쓰일 sql 문은 다음과 같이 xml 파일에 작성하였습니다. 일단, 제 Usert 클래스입니다. id, pw, num 필드가 있다는 것을 알 수 있습니다. 다음에, SqlSource를 implements한 DynamicSqlSource 클래스가 있는데요. 이 안에 getBoundSql이 있습니다. 느낌상 이 메서드가 바운드를 시킬 거 같으니, 적당한 위치에 브레이크 포인트를 걸어보겠습니다. 이 때 ..
spring/db 검색 결과
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 객체를 참조하는 값이 리..
최근댓글