Spring_MyBatis

song·2023년 11월 3일

Spring

목록 보기
16/19

환경설정

드라이버 다운받기

  1. Maven Repository 사이트 가기
    https://mvnrepository.com/
  2. MyBatis 라고 검색 > MyBatis, MyBatis Spring 둘 다 받을 거임.
  3. MyBatis -> 3.5.10버전
    MyBatis Spring -> 2.0.7버전
  4. 아래 코드 복사해서

    poom.xml가서 dependencies 밑에 붙여놓기.
  5. poom.xml Maven > 업데이트하기. 그런데 인텔리제이에서는 그렇게 가도 아래 버튼 누르면 된다
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.14.1</version>
</dependency> 
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
<dependency>
	<groupId>org.bgee.log4jdbc-log4j2</groupId>
	<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
	<version>1.16</version>
</dependency>

위 코드도 붙여놓기.

java와 MyBatis 연결 주소 설정하기

  1. poom.xml 설정
  • 위 드라이버 다운받기 하면 됨.
  • mvn repo에서 MyBatis, My Batis Spring (2버전으로 받기) 받아서 poom에 넣기
  1. web.xml 파일에 한글필터 넣기 (이거 없으면 한글 깨짐)

    web.xml 열기

    Source탭에 가서 맨 밑에 아래 소스 추가하기.
<!-- 한글 변환 필터 시작 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
<!-- 한글 변환 필터 끝 -->
  1. root-context.xml 파일 설정

    root-context.xml 파일가서

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation"  value="classpath:mybatis-config.xml"/> <!-- mybatis 설정파일 위치 (main > resource 폴더)-->
    <property name="mapperLocations" value="classpath:mapper/*Mapper.xml"/> <!--sql 담긴 파일들 위치랑 이름 패턴 지정한 파일--> 
    </bean>
    
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg ref="sqlSessionFactory"/>
    </bean>

    위 소스 붙여넣기

    resources 폴더에 mapper 폴더 만들고 그 아래에 boardMapper.xml 파일 만들기
    resources 폴더에 mybatis-config.xml 파일 만들기

  2. main > java > com.bitstudy.app 안에 controller, dao, domain(dto), service 패키지 생성

    밑으로 내려서 매핑된 SQL 구분 복사

DAO와 MyBatis 연결

https://mybatis.org/mybatis-3/ko/getting-started.html
위 홈페이지 들어가서

시작하기로 들어간다.

밑으로 내려서 매핑된 SQL 구분 복사

<?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>

  • selectOne : 결과값이 하나
  • namespace로 dao와 boardMapper를 연결하는 것이고,
    namespace변수에 값넣을 때 마지막에 . 꼭 넣기!
  • 뒤에 붙인 select로 boardMapper의 아이디값으로 연결해서 해당 구문 쓸거라는 뜻이고,
  • 같이 보내는 bno(int타입)을 boardMapper에서 받을 때 (parameterType) int로 받을 거고 - sql문 실행할 때 #{bno}라고 써있는 부분에 보낸 bno값이 들어간다. ($이 아니라 #을 씀. 주의)
  • resultType에 경로 지정해놓은 DTO파일에 sql 결과값을 저장하겠다는 뜻.

약어 설정 (별칭 설정)

https://mybatis.org/mybatis-3/ko/getting-started.html
위 홈페이지 들어가서

시작하기로 들어간다.

밑으로 내려서 위 코드 복사.

필요한 코드만 추려놓기.
typeAliases 해서 별칭 BoardDto 로 해놓고 type에 링크를 적어놓는다.
해당 별칭은 mybatis에서만 사용할 수 있다. (boardMapping에서 사용)

그러면 위와같이 resultType을 com.bitstudy.app.domain.Ex02_BoardDto로 써야하는데 BoardDto라고만 써도 인식할 수 있다.

MyBatis

  • SQL Mapping Framework
    • 자바 코드로부터 SQL문을 분리해서 관리
    • 작성할 코드가 줄어서 생산성 향상 및 유지 보수 편리
      • 자동으로 Connection close() 기능
      • MyBatis 내부적으로 PreparedStatement 처리

메서드

  • insert
    • insert문을 실행하고, insert된 행의 개수를 반환
  • delete
    • delete문을 실행하고, delete된 행의 개수를 반환
  • update
    • update문을 실행하고, update된 행의 개수를 반환
  • selectOne
    • 하나의 행을 반환하는 select에 사용.
    • parameter로 SQL에 binding될 값 제공
  • selectList
    • 여러 행을 반환하는 select에 사용.
    • parameter로 SQL에 binding될 값 제공
    • 순서가 있는 데이터의 집합
    public List<Ex02_BoardDto> selectAll(){
      return session.selectList(namespace+"selectAll");
    }
    ------
    <select id = "selectAll" resultType = "BoardDto">
      select * from board order by reg_date desc, bno desc
    </select>
    list타입으로 값 받기.
  • selectMap
    • 여러 행을 반환하는 select에 사용.
    • keyCol에 Map의 key로 사용할 컬럼 지정
    • 순서가 없는 데이터의 집합

기타

delete할때는 return값을 int로 하면 된다. return값이 0이면 하나도 못지운거고, return값이 1이면 한줄 지운거다.

map을 사용하거나 dto로 값을 보내고 받아서 사용할 때 #{map.키} 혹은 #{dto.키}로 쓰는게 아니라 그냥 #{키}만 쓰면 된다.

profile
계속 나아가기

0개의 댓글