본문 바로가기
📚Framework & Library/MyBatis

[MyBatis] 기본 세팅 및 사용 방법

by inbeom 2023. 9. 10.
728x90

1. pom.xml 작성


pom.xml에 2개의 dependency를 등록한다.

  1. 로컬에 MariaDB로 DB를 구성했기때문에 MariaDB JDBC를 등록했다. JDBC는 Java로 DB에 접근 및 제어를 가능하게 해주는 API다.
  2. mybatis는 JDBC를 좀 더 편하게 사용할 수 있도록해주는 라이브러리인데 JDBC의 결과 및 설정 매핑을 대신해주고, 결정적으로 mybatis를 사용하면 Java 코드가 간결해진다.
<dependency>
			<groupId>org.mariadb.jdbc</groupId>
			<artifactId>mariadb-java-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.1</version>
</dependency>

 

2. DB접속정보 작성


application.yml에 DB접속 정보와 mapper의 경로를 지정해준다. 해당 경로에 있는 xml을 mybatis가 읽어서 쿼리문을 실행한다.

 

3. 도메인 작성


domain폴더에 mybatis의 결과를 담을 class를 선언한다. 보통 Select문의 결과로 받을 컬럼을 그대로 작성한다.

 

4. MapperScan 어노테이션


Application이 시작되는 java파일에 @MapperScan 어노테이션을 추가한다. 해당 어노테이션의 basePackages 파라미터값으로 mapper 인터페이스가 작성된 패키지경로를 넣는다. Spring Boot가 실행되면 해당 패키지로 이동해서 mapper들을 읽어들인다.

 

5. Mapper 인터페이스


4번에서 작성한 MapperScan이 Mapper를 인식할수 있도록 @Mapper 어노테이션을 달아준다.

  • select에 실패했을 경우 null을 반환하기 때문에 Optional<ArrayList<stockInfo>>타입으로 사용하는 것이 좋다.

 

6. Mapper xml 작성


resources/mapper 아래에 mapper.xml파일을 작성한다.  mapper태그를 작성하고 그안에 실행할 쿼리문을 넣으면된다. mapper 태그에는 5번에서 작성한 mapper 인터페이스를 선언해준다.

  • SQL문 안에 #{id} 구문을 사용하여 파라미터 값을 받을 수 있다. 그냥 함수를 사용할 때 ()안에 값을 넣으면 순서대로 들어감.
  • 여러값을 넣어야 할 땐 HashMap에 값을 put하여 던짐. map의 key가 #{}이름과 매칭됨.

 

7. 서비스 인터페이스 작성


서비스인터페이스를 작성한다.

 

8. 서비스 구현


7번에서 만든 인터페이스를 구현한다. 해당 클래스가 Service인걸 알리기 위한 @Service 어노테이션을 작성한다. 여기서 5번에서 작성한 mapper 인터페이스에 Bean을 주입한다. 비즈니스로직이 존재하는경우 serviceImpl에서 구현한다.

 

9. 컨트롤러 구현


마지막으로 컨트롤러를 구현한다. 클라이언트의 요청을 받아서 서비스를 호출하는 부분이다. 여기서 서비스 인터페이스에 serviceImpl을 주입한다.

 

 

 💡 파라미터 넘겨주기

parameterType 으로 MyBatis에서 전달받을 값을 지정.

  • 단일값을 전달 받을 경우에는 변수명을 마음대로 사용가능. #{변수명}
  • 여러값을 전달받을경우 (Map)에는 전달에 사용한 Key 값이 변수명이 된다.

Mapper

<!-- 이름을 하나 받아서 검색하는 SELECT -->
  <!-- 파라메터 타입이 String 또는 기본 자료형이면 변수명을 마음대로 사용할 수 있다. -->
  <select id="searchName" resultType="mybatis.vo.MemVO" parameterType="java.lang.String">
    select * from hr.member_t where mem_name = #{strName}
    <!-- select * from hr.member_t where mem_name LIKE '%'||#{strName}||'%' -->
  </select>
  
  <!-- 회원 검색 -->
  <select id="searchID" resultType="mybatis.vo.MemVO" parameterType="java.util.Map">
    select * from hr.member_t where mem_id = #{id} and mem_pwd = #{pwd}
    <!-- select * from hr.member_t where mem_name LIKE '%'||#{strName}||'%' -->
  </select>
  
  <!-- 회원 추가 -->
  <insert id="addMem" parameterType="java.util.Map">
      insert into hr.member_t (mem_id, mem_pwd, mem_name, mem_email, mem_phone, mem_reg_date)
      values (#{id}, #{pwd}, #{name},#{email},#{phone}, sysdate)
  </insert>
  
  <!-- 회원 수정 -->
  <update id="updateMem" parameterType="java.util.Map">
      update hr.member_t set mem_pwd=#{pwd}, mem_name=#{name}, mem_email=#{email}, mem_phone=#{phone}, mem_reg_date=sysdate
      where mem_id=#{id}
  </update>

Service

// 인자로 받은 값들은 MyBatis에 묶어서 보내야 한다.
// map의 5개의 값들을 Map 구조로 묶었다. 이때 사용한 key가 MaBatis에서 사용되는 변수명이 된다.
HashMap<String, String> map = new HashMap<>();
map.put("id", s_id);
map.put("pwd", s_pwd);
map.put("name", s_name);
map.put("email", s_email);
map.put("phone", s_phone);
 
SqlSession ss = null;
 
//세션
try {
    ss = factory.openSession(true);
 
    ss.insert("mem.addMem", map);
 
    JOptionPane.showMessageDialog(this, "정상 처리 되었습니다.");
    isStatus = true;
} catch (Exception e) {
    JOptionPane.showMessageDialog(this, "회원등록 오류...");
} finally{
    if(ss != null)
        ss.close();
}

 

 

728x90

'📚Framework & Library > MyBatis' 카테고리의 다른 글

[MyBatis] Dynamic Query. 동적 쿼리  (0) 2023.09.10
[MyBatis] MyBatis란  (0) 2023.09.08