[Spring Boot] MyBatis 설정 및 DAO 구현

2023. 4. 18. 00:27·Java/Spring Boot
728x90
728x90

MyBatis

  - Java 객체와 SQL문 사이의 자동 매핑을 지원하는 매퍼 프레임워크

  - SQL 쿼리를 작성할 때 xml 또는 어노테이션 이용 가능

      → 쿼리 구문을 작성해서 데이터베이스와 통신 수행

  - 매우 유연한 구조

      · SQL 쿼리와 Java 객체의 매핑 규칙을 세부적으로 지정할 수 있음

      · 동적 SQL 쿼리 구문을 작성할 수 있음

 

 


MyBatis 설정

1) 의존성 추가 (build.gradle)

1
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
cs

 

2) 설정 (application.yml)

1
2
3
4
5
mybatis:
  mapper-locations:         # **.xml : 해당 경로 아래 모든 xml 파일
  - classpath:mapper/**.xml # classpath는 src/main/resources/ 아래부터 시작
  configuration:
    map-underscore-to-camel-case: true # DB의 underscore(snake case) 방식을 Java의 camel case 방식과 매핑
cs

 

 

반응형
728x90

DAO 구현

1. 표준을 위한 인터페이스 정의

  - src/main/java/com.example.demo.repository.interfaces. ~

 

▶ 예시

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Mapper // MyBatis가 인식할 수 있게 됨
public interface UserRepository {
    
    public int insert(User user);
    
    public int updateById(User user);  
    
    public int deleteById(Integer id); // principal (접근 주체)로도 사용함
    
    // 전체 조회
    public List<User> findAll();
    
    // 특정 고객 조회
    public User findById(Integer id);
    
}
Colored by Color Scripter
cs

 

▶ 주의사항

  - 매개변수 개수가 2개 이상이면 반드시 @Param("파라미터명")을 명시해주어야 함 !

 

1
2
    // 매개변수 개수가 2개 이상이면 반드시 파라미터 이름 명시
    public List<HistoryDto> findByIdHistoryType(@Param("type") String type, @Param("id") Integer id);
cs

 

2. xml 파일에 쿼리 구문 작성

  - yml 파일에 기술한 경로에 xml 파일을 생성해야 함

      : src/main/resources/mapper/**.xml

  - Connection, PreparedStatement, ResultSet을 알아서 관리해줌

 

▶ 기본 틀

  - 복사해서 붙여넣고, <mapper> 태그 안에 코드 작성

  - 매개변수 값을 #{매개변수명}으로 가져올 수 있음

  - DTO 객체를 반환할 경우, resultType 속성으로 해당 클래스의 경로를 지정해주어야 함

 

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
<mapper> 
 
</mapper>
Colored by Color Scripter
cs

 

▶ 예시

더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
                 
                   <!-- DAO 인터페이스 경로를 정확히 입력 -->
<mapper namespace="com.tenco.bank.repository.interfaces.UserRepository"> 
 
    <insert id="insert"> <!-- id명은 대응되는 DAO interface의 메서드명과 동일하게 -->
        INSERT INTO user_tb (username, password, fullname, created_at)
        VALUES ( #{username}, #{password}, #{fullname}, now() )  <!-- SQL의 함수를 사용할 수 있음 -->
    </insert>
    
    <!-- parameterType 속성은 필수 속성이 아니며, 가독성을 위해 지정하는 것 -->
    <update id="updateById" parameterType="com.tenco.bank.repository.model.User">
        UPDATE user_tb SET username = #{username}, password = #{password}, fullname = #{fullname}
        WHERE id = #{id}
    </update>
    
    <delete id="deleteById">
        DELETE FROM user_tb WHERE id = #{id}
    </delete>
    
    <!-- SELECT는 객체 타입으로 리턴할 것이므로, 모델 클래스를 지정해주어야 함 -->
    <select id="findById" resultType="com.tenco.bank.repository.model.User"> 
        SELECT * FROM user_tb WHERE id = #{id}
    </select>
    
    <!-- List 내 자료형도 단일 객체처럼 resultType 속성  -->
    <select id="findAll" resultType="com.tenco.bank.repository.model.User"> 
        SELECT * FROM user_tb
    </select>
    
</mapper>
Colored by Color Scripter
cs

 

 

320x100
반응형
저작자표시 비영리 변경금지 (새창열림)

'Java > Spring Boot' 카테고리의 다른 글

[Spring Boot] Model 클래스 (Entity)와 DTO 클래스  (0) 2023.04.19
[Spring Code] 사용자 정의 예외 클래스와 에러 페이지  (0) 2023.04.19
[Spring Boot] TRM (Table Relational Mapping) 기반 모델링  (0) 2023.04.14
[Spring Boot] 프로젝트 초기 세팅  (0) 2023.04.14
[Spring Boot] yml 파일  (0) 2023.04.14
'Java/Spring Boot' 카테고리의 다른 글
  • [Spring Boot] Model 클래스 (Entity)와 DTO 클래스
  • [Spring Code] 사용자 정의 예외 클래스와 에러 페이지
  • [Spring Boot] TRM (Table Relational Mapping) 기반 모델링
  • [Spring Boot] 프로젝트 초기 세팅
스응
스응
    반응형
    250x250
  • 스응
    이서영의 개발 블로그
    스응
  • 전체
    오늘
    어제
  • 글쓰기 관리
    • 분류 전체보기 (383)
      • Java (134)
        • Base (54)
        • Spring Boot (37)
        • JSP (16)
        • Swing (GUI) (20)
        • Design Pattern (7)
      • C# (13)
      • PHP (18)
      • SQL (27)
      • Vue.js (10)
      • Tailwind CSS (4)
      • TypeScript (7)
      • HTML & CSS (27)
      • JavaScript (26)
      • jQuery (10)
      • Android (3)
      • - - - - - - - - - - - - - - (0)
      • Hotkeys (5)
      • CS (30)
      • etc. (13)
      • Error Note (14)
      • Team Project (24)
        • Airlines Web Project (12)
        • University Web Project (6)
        • Strikers 1945 GUI Project (6)
      • My Project (18)
        • Library Web Project (8)
        • Pet Shopping Mall GUI Project (10)
  • 블로그 메뉴

    • Home
    • Write
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    Android
    SQL
    git
    cs
    typeScript
    java
    jsp
    errorNote
    php
    SEO
    오블완
    vuejs
    면접
    jQuery
    HTML
    Wordpress
    CSS
    zapier
    http
    SpringBoot
    js
    개발일지
    tailwindcss
    C#
    Hotkeys
    Codeigniter
    티스토리챌린지
    Swing
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
스응
[Spring Boot] MyBatis 설정 및 DAO 구현
상단으로

티스토리툴바