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); } | 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> | 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> | 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 |