Dao
Connection
Preparestatement
ResultSet
여기서 작업상의 부화율이 가장 높은 것은 데이터를 가져오고 처리해주는 Connection이 가장 높다. Request가 들어와서 조치를 취해주고 응답이 나가는데까지 걸리는 시간 중 DB가 가장 오래 걸리는데 Connection을 열어주는데 꽤 걸리기 때문이다. 이것을 줄이면 좋을 것 같다.
응답시간이 느려진다는 것은 우리가 웹브라우저를 사용할 때 빙글 빙글 돌아가는 그 시간이 긴 것을 의미한다.
지금까지는 JVM과 DBMS간의 연결을 요청이 있을 때 마다 열고, 다 쓴 뒤 닫는방법을 사용했다.
: JVM과 DBMS간의 연결을 요청이 있을 때 마다 열고, 다 쓴 뒤 닫는게 아니라, 서버가 켜질때 설정에서 지정한 개수 만큼의 Connection을 미리 다 열어놓고 필요할때 빌려주고 닫지 않고 돌려 받는 것.
- HikariCP 사용 (
빛 만큼 빠르다 라는 의미..)서버가 켜질때 : 구동을 시킬 때는 아니고 최초의 요청이 있을 때지만 저렇게 표현하였다.
DB랑 연결되는 Connection 객체가 5개있다고 했을 때 5개 전부 다 열어 놓는다고 생각하자. Dao가 필요할때 빌려주고 close()
하는 것을 재정의해서 닫는게 아니라 다시 돌려 받는 형식이다.
DB랑 연결하는 시간에서 Connection을 여는 시간이 아얘 사라짐으로 빨라지게 된다.
- HikariCP가 압도적으로 빠르다.
객체 관계 모델
: Java 객체와 DBMS 구성요소간의 상호 작용을 매우 쉽게해준다.
- MyBatis 사용 : 얘를 사용하면 Dao를 전혀 사용하지 않는다.
- 내부적으로는 Connection, Preparestatement, ResultSet을 사용하는 것임으로 잊으면 안된다.
study-member
새 프로젝트 생성.
: 단위 테스트
: MariaDB에 접속하기 위해 사용하는 커넥터
: MySQL에 접속하기 위해 사용하는 커넥터
: Spring Boot를 통해 DBMS에 접근하기 위해 사용. DBCP 포함
: MyBatis ORM을 사용하기 위한 의존성
src/main/resources/application.properties 파일에 접속하고자하는 데이터베이스의 정보를 제공한다.
→ spring.datasource.driver-class-name → spring.datasource.url → spring.datasource.username → spring.datasource.password
src/main/resources/application.properties 파일에 MyBatis ORM의 쿼리 XML 위치를 지정한다.
→ mybatis.mapper-locations=classpath:mappers/**/*.xml
- 여기서 작성한
classpath = resources
이다.
XML Templates 지정해놓는 방법
https://mybatis.org/mybatis-3/ko/getting-started.html
- 복붙해서 내가 필요한 것만 남긴다.
- shift 2번
File and Code Templates
참고) 스프링이 관리하는 모든 것들을 bean이라고 한다.
- 얘!!!
-> HomeController-> TestService
-> DB추가
-> TestEntity
-> TestEntity > getTestEntity
-> ITestMapper
- 인터페이스 → 구현부를 작성하지 않는다.
- TestService은 ITestMapper에 의존적이다. spring이 알아서 객체화하도록 @Autowired 추가.
-> HomeController
- HomeController는 TestService에 의존적이다.
- TestService에서 testMapper의 select 리턴해준다.
이 인터페이스의 select가 돌려주는 값 자체를 돌려준다.
-> HomeController
mapper -> service -> controller 방식을 벗어나지 않는다.
- mapper의 namespace에 ITestMapper의 풀네임을 적는다.
❗️ command 클릭 시 이동 되어야지 잘 적은 것이다.
<select id="select" resultType="dev.jwkim.studymember.entities.TestEntity"> id 속성 : 메서드 이름 resultType 속성 : 어떤 응답결과를 줘야되는지에 대해서 명시를 해주는데 풀네임으로 작성해야하며 select할 때만 사용한다. 이 메서드의 반환타입이 있기 때문에 반환타입을 명시해준다.
- 쿼리 작성!
- localhost 로 들어가면 이렇게 뜨게 된다.
MyBatis가 알아서 어떻게 select를 한걸까?
즉, mapper에 있는게 Entity의 멤버변수에 들어갔을까?index → Index → setIndex ↑ 파스칼케이싱 ↑ set붙인 메서드를 MyBatis가 찾는다.
해당 메서드를 찾아서 값을 전달해준다.
별명만 멤버변수랑 똑같이 적어주면 된다❗️