지난 번 영상은 JPA 설정하고 Custom 쿼리 만드는 것 까지 했었다.
Mybatis를 이용해서 custom query를 날리는 방법을 알아보겠다.
god coder보다는 cosin이 입에 더 감기는 느낌이라 해당으로 변경.
스프링부트 프로젝트 소스를 많이 보면 JPA는 많이 사용함.
그러나 custom query를 날릴때에는 어떻게 날릴 것인가?
QueryDSL도 많이 쓴다.
JAVA 코드 내에서 소스로 코딩을 한다.
컴파일 시점에 바로 에러가 뜬다.
잘못된 쿼리나 문법을 잡아주는 장점이 있음.
그러나 실제 SQL이 아니다보니 결과를 바로 알기가 힘듦.
mybatis를 사용하게 되면 실제 SQL
MyBatis를 이용하는 것이 괜찮은 방법임.
실제로 뭐가 괜찮은지는 시장이 선택을 할 것임.
각자 책임자가 어떤 방법을 쓸지 정함.
Mybatis로 쿼리를 날려볼 것임.
동일한 패턴.
사용자 조회하는 건데 API자체가 users이다.
메소드에 mybatis 설정을 함.
like 검색으로 문자 키워드 text가 포함되는 username.
코드를 작성하기 위해서는 세팅을 해야함.
구글링하면 바로 첫줄에 나옴.
자신의 프로젝트가 maven이므로 해당 코드로 설정하겠다.
오픈소스 메뉴얼들을 잘 읽어봐야 한다.
메뉴얼에서 시키는대로 최대한 똑같이 해라.
2.2는 스프링부트가 2.5나 그 이상이 되어야 한다.
예전에 만들었던 프로젝트라 스프링부트가 2.2.7이다.
예전의 셋팅을 따라간다.
https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/
2.1.4라고 자동 완성이 된다.
메이븐에서 가장 높은 거 선택하면 된다.
configulation 부분을 설정하겠다.
# application.properties
mybatis.type-aliases-package=com.example.domain.model
mybatis.type-handlers-package=com.example.typehandler
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.default-fetch-size=100
mybatis.configuration.default-statement-timeout=30
default 부분은 세팅하지 않을 것이다.
typehandler도 미사용.
필요한 게 있으면 추가로 설정.
package를 자신의 model패키지 경로로 지정.
db를 조회하게 되면, 해당 데이터들을 클래스로 담아야 한다.
클래스 담는 패키지를 설정할 수 있음.
데이터베이스컬럼은 보통 언더바로 표시함.
자바는 캐멜 케이스로 표시함.
자바 변수가 userAge로 선언이 되어 있다면, 해당 값에 세팅하겠다는 것임.
MyBatis의 전 기능을 사용하지는 않음.
Custom Query 부분만 설정할 것임.
Mapper를 만들어서 사용해볼 것임.
Mapper는 JPA의 repository와 비슷한 기능을 함.
Mapper를 만들 때에는 Mapper 어노테이션을 사용해야 함.
getUsers를 만들어볼 것임.
String의 text.
myBatis를 쓸 때에는 Param 어노테이션 사용.
쿼리에서 어떤 변수명을 사용할 지 지정을 해줘야 함.
아까는 spring boot의 mybatis를 검색함.
지금은 기본적인 MyBatis.
Spring Boot를 우리는 사용하고 있음.
그래서 일반적인 My Batis 설정을 전부 할 필요가 없이 간편해진다.
My Batis 기능을 볼 때해는 해당 페이지에서 보고 참조하면 됨.
Mapper.xml파일이 될 것임.
xml 안에 셀렉트 쿼리가 작성이 가능함.
기본 문법을 샘플로 가져올 것임.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
resources 폴더에 mapper를 만들어볼 것임.
해당 폴더에 xml 파일들을 넣을 것임.
selete id와 namespace 변경.
result 타입이 모델 클래스에 있는 패키지들이 될 것임.
gildong이라는 키워드가 있으면 검색이 됨.
gildong2만 검색이 됨.
블럭 지정한 부분이 text가 될 것임.
그러나 퍼센트 기호와 사용하기가 어려움.
SQL함수중에 CONCAT이 있음.
결과값이 동일함.
자바 String +로 붙인 것과 같은 효과임.
붙여넣기.
샘플을 보면 #{id}로 되어 있음.
해당 부분이 getUsers의 text가 될 것임.
List 형태로 반환이 될 것임.
Autowired로 UserMapper 선언 해줌.
users 자체가 literable이므로 list도 들어감.
하나 더 설정을 해줘야 할 것이 있다.
spring boot my batis 설정.
mapper-locations 설정이 필요함.
Tistory에 써있는 방식으로 많이 설정함.
classpath:mapper/**/*.xml
프로젝트에서 mapper에서 그 아래 모든 하위 폴더의 xml 파일들.
그래야 모델 mapper와 mapper 설정이 서로 위치를 알게 됨.
쿼리가 실행되게끔 위치를 알려줌.
브레이크포인트 걸어본 것임.
포스트맨에서 실행됐음.
로그에 작성한 쿼리도 나옴.
실제로 작성한 코드가 제대로 작동함.
15. 트랜잭션 처리 및 주의점 (0) | 2023.12.28 |
---|---|
13. JPA 이용한 커스텀 쿼리 만들기(QueryDSL) (1) | 2023.12.23 |
12. 권한에 맞는 화면 구성 및 API 호출 (0) | 2023.12.18 |
11. JPA로 조회방법(FetchType) 설정하기 (0) | 2023.12.16 |
10. JPA를 이용하여 @OneToMany 관계 설정하기 (1) | 2023.12.15 |
댓글 영역